我需要在这样的文本中找到第一组5个数字:
;SUPER U CHARLY SUR MARNE;;;rte de Pavant CHARLY SUR MARNE Picardie 02310;Charly-sur-Marne;;;02310;;;;;;;;;;;;;;
我只需要找到第一个02310
。
我的正则表达式,但是找到了所有5个数字集:
([^\d]|^)\d{5}([^\d]|$)
答案 0 :(得分:1)
要匹配您可以使用的前5位数字
^.*?\K(?<!\d)\d{5}(?!\d)
请参见regex demo。要删除匹配项,只需将替换为字段保留为空白。 ^
匹配行的开头,.*?
匹配除换行符以外的任何0+字符,并且尽可能少,并且\K
运算符将到目前为止匹配的文本删除。然后,(?<!\d)\d{5}(?!\d)
匹配5个未用其他数字括起来的数字。
另一个变体包括捕获组/反向引用:
查找内容:^(.*?)(?<!\d)\d{5}(?!\d)
替换为:$1
请参见this regex demo。
这里,(.*?)
不会被捕获到数字前,而是被捕获到第1组中,而替换模式中的$1
则将其放回数字中。
答案 1 :(得分:0)
要查找文本的前5位数字,也可以不匹配数字\D*
或1-4位数字,然后再匹配5位数字:
^(?=.*\b\d{5}\b)(?:\D*|\d{1,4})*\K\d{5}(?!\d)
^
字符串的开头(?=.*\b\d{5}\b)
断言单词边界之间有5个连续的数字(?:\D*|\d{1,4})*
重复匹配0+次而不是一个数字或1-4个数字\K\d{5}
忘记匹配的内容,然后匹配5位数字(?!\d)
声明后面的不是数字答案 2 :(得分:0)
我会用
(^(?:(?!\d{5}).)+)(\d{5})(?!\d)
它将查找从字符串开头到第一个5位数字末尾的片段,但是如果要替换,可以使用$1
或$2
来替换相应的部分。例如,替换$1<$2>
将用<
和>
包围数字。