gpt4 book ai didi

regex - 正则表达式:获取我所有文档中使用的所有主题标签和提及内容

转载 作者:行者123 更新时间:2023-12-02 22:21:58 25 4
gpt4 key购买 nike

我正在使用Kibana控制台执行此类查询(它们是分开的:一个用于主题标签,一个用于提及)。文档集合是带有textContent字段的博客条目,其中可能包含诸如@theUserName @AnotherOne之类的用户提及或诸如#helloWorld和#hello2之类的井号。查询如下所示:

GET /xblog/_search
{
"source": [
"id",
"textContent"
],
"query": {
"regexp": {
"textContent": {
"value": "@([^-A-Za-z0-9])",
"flags": "ALL"
}
}
}
}

但是问题在于它还会返回不包含@userMention的文档。我认为正则表达式中的@被视为特殊符号,但是在阅读文档时,我找不到如何对其进行转义。

在文档1中,作者说您可以使用双引号将任何符号转义,因此我进行了测试:

““@”“
但是我什么都没有。

我还测试了我习惯的表达式,例如:
/ \ s([@#] [\ w _-] +)/ g

但这会在Kibana中产生多个错误。我曾尝试根据文档更换某些零件,但仍然无法正常工作。

你能为我指出正确的方向吗?
提前致谢,

最佳答案

您启用了使ALL与整个字符串匹配的@标志,请参阅ElasticSearch regex documentation:

If you enable optional features (see below) then these characters may also be reserved:

# @ & < > ~


然后,在“任意字符串”部分中:

The at sign "@" matches any string in its entirety.
Enabled with the ANYSTRING or ALL flags.


由于这里不需要任何特殊的行为,您可以简单地通过传递 "flags": "NONE"或通过转义 @"\\@([^-A-Za-z0-9])"来告诉引擎使用“简单的”正则表达式:

Any reserved character can be escaped with a backslash "\*" including a literal backslash character: "\\"


并且由于需要整个字符串匹配,因此可能需要在两端添加 .*(以匹配包含您的匹配项的字符串):
"query": {
"regexp": {
"textContent": {
"value": ".*@[^-A-Za-z0-9].*",
"flags": "NONE"
}
}
}
要么
"query": {
"regexp": {
"textContent": {
"value": ".*\\@[^-A-Za-z0-9].*",
"flags": "ALL"
}
}
}

关于regex - 正则表达式:获取我所有文档中使用的所有主题标签和提及内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54597322/

25 4 0