查找文本中的第一组5位数

时间:2019-06-19 09:38:22

标签: regex notepad++

我需要在这样的文本中找到第一组5个数字:

;SUPER U CHARLY SUR MARNE;;;rte de Pavant CHARLY SUR MARNE Picardie 02310;Charly-sur-Marne;;;02310;;;;;;;;;;;;;;

我只需要找到第一个02310

我的正则表达式,但是找到了所有5个数字集:

([^\d]|^)\d{5}([^\d]|$)

3 个答案:

答案 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)声明后面的不是数字

Regex demo

答案 2 :(得分:0)

我会用

(^(?:(?!\d{5}).)+)(\d{5})(?!\d)

它将查找从字符串开头到第一个5位数字末尾的片段,但是如果要替换,可以使用$1$2来替换相应的部分。例如,替换$1<$2>将用<>包围数字。