Regex 弹性搜索正则表达式以从右侧获取最后7位数字
我有6767234342334444443249444格式的索引数据。我需要一个正则表达式来设置anlayser右起最后7位的模式。Ex输出:2494444。我们尝试过的模式[0-9]{7}不起作用。在ElasticSearch中,模式为。这意味着,您不能依赖于部分匹配,您需要匹配整个字符串并捕获最后连续的7位数字 使用 在哪里Regex 弹性搜索正则表达式以从右侧获取最后7位数字,regex,elasticsearch,pattern-matching,sense,Regex,elasticsearch,Pattern Matching,Sense,我有6767234342334444443249444格式的索引数据。我需要一个正则表达式来设置anlayser右起最后7位的模式。Ex输出:2494444。我们尝试过的模式[0-9]{7}不起作用。在ElasticSearch中,模式为。这意味着,您不能依赖于部分匹配,您需要匹配整个字符串并捕获最后连续的7位数字 使用 在哪里 *-将匹配除换行符以外的任何0+字符(尽可能多),然后将回溯以匹配 ([0-9]{7})-将7位数字放入捕获组1 如果在正则表达式模式中定义了捕获组,则Sense插
-将匹配除换行符以外的任何0+字符(尽可能多),然后将回溯以匹配*
-将7位数字放入捕获组1([0-9]{7})
如果在正则表达式模式中定义了捕获组,则Sense插件将返回捕获的值,因此无需执行额外的提取工作(或组访问工作)。在ElasticSearch中,模式为。这意味着,您不能依赖于部分匹配,您需要匹配整个字符串并捕获最后连续的7位数字 使用 在哪里
-将匹配除换行符以外的任何0+字符(尽可能多),然后将回溯以匹配*
-将7位数字放入捕获组1([0-9]{7})
如果在正则表达式模式中定义了捕获组,则Sense插件将返回捕获的值,因此,不需要进行额外的提取工作(或组访问工作)。不确定是否可以访问捕获组,但这似乎是您唯一的选择-
\[.*([0-9]{7})\]
。请让我知道这是否对你有效。我尝试通过sense插件创建Analyzer。但不接受反斜杠获取错误。这就是我正在尝试的。POST/telephone{“settings”:{“analysis”:{“my_email_analysis”:{“type”:“pattern”,“pattern”:“[.*([0-9]{7})],“lowercase”:true}}}}}}}}如果字符串中没有[
和]
,您可以尝试*([0-9]{7})
。或者如果Sense插件没有锚定模式,那么使用[0-9]{7}$
Wiktor Stribiżew-尝试使用。*([0-9]{7})这个模式,它会得到最后7位直到空格,但是如果我有超过7位直到空格,我就不会得到任何结果。例如:“文本”:“8765432123 2342234 1234564 899878”。输出:{“标记”:[{“标记”:“899878”,“开始偏移量”:27,“结束偏移量”:34,“类型”:“单词”,“位置”:0}]}如果我在最后一个数字8787上再添加一个数字,则响应为空。@Wiktor Stribiżew模式在online executor中工作,但当我尝试相同的感官插件时,它对elasticsearch不起作用*([0-9]{7}). 如果我添加的数字超过7位,analyze api将不返回任何标记。不确定您是否可以访问捕获组,但这似乎是您唯一的选择-\[.*([0-9]{7})\]
。请让我知道这是否对你有效。我尝试通过sense插件创建Analyzer。但不接受反斜杠获取错误。这就是我正在尝试的。POST/telephone{“settings”:{“analysis”:{“my_email_analysis”:{“type”:“pattern”,“pattern”:“[.*([0-9]{7})],“lowercase”:true}}}}}}}}如果字符串中没有[
和]
,您可以尝试*([0-9]{7})
。或者如果Sense插件没有锚定模式,那么使用[0-9]{7}$
Wiktor Stribiżew-尝试使用。*([0-9]{7})这个模式,它会得到最后7位直到空格,但是如果我有超过7位直到空格,我就不会得到任何结果。例如:“文本”:“8765432123 2342234 1234564 899878”。输出:{“标记”:[{“标记”:“899878”,“开始偏移量”:27,“结束偏移量”:34,“类型”:“单词”,“位置”:0}]}如果我在最后一个数字8787上再添加一个数字,则响应为空。@Wiktor Stribiżew模式在online executor中工作,但当我尝试相同的感官插件时,它对elasticsearch不起作用*([0-9]{7}). 如果我添加的数字超过7位,analyze api不会返回任何标记。我还有一个问题要问你。上面的模式只有在我给出7位数以上的数据时才会得到结果。如果我有一个长度小于六位数的值,那么它不会返回。如果实际值长度小于7,是否需要更改模式以获得结果?似乎需要在*
之后的模式中插入空格,然后将min参数引入限制(绑定)量词:*([0-9]{1,7})
。这将获取空格后的1到7个最后数字。ex1:123,ex2:6757677687,ex3:123 1232。在这三个例子中,如果我使用这个模式,我需要得到输出。Ex1:123,Ex2:7677687,Ex3:1232。你能帮个忙吗?你是说字符串没有空格?好的,然后使用*?([0-9]{1,7})
。*?
是惰性的,它将在捕获组中保留1到7个数字。它选择7个数字以上的结果。我只需要得到7和以下。如果我有10个数字,那么应该忽略额外的3个数字。如果你看我之前的评论ex2:6757677687,输出是7677687。现在我实际得到的是7677687675。我得到的是两个代币而不是一个。我还有一个问题要问你。上面的模式只有在我给出7位数以上的数据时才会得到结果。如果我有一个长度小于六位数的值,那么它不会返回。如果实际值长度小于7,是否需要更改模式以获得结果?似乎需要在*
之后的模式中插入空格,然后将min参数引入限制(绑定)量词:*([0-9]{1,7})
。这将获取空格后的1到7个最后数字。ex1:123,ex2:6757677687,ex3:123 1232。在这三个示例中,如果我使用
.*([0-9]{7})