查找缺少 0 的 phone 个数字

Find phone numbers with a missing 0

我在 Notepad++ 中打开了一个 csv 文件,并尝试使用 Search/Replace 函数并选中 "Regular Expression" 来查找缺少 0 的 phone 个数字。

我已经开始我的正则表达式 (\d[0-9]{10}) 找到所有 phone 个数字,但我只需要找到那些缺少前导 0 的数字。

请问执行此操作的合适的 RegEx 模式是什么?


csv文件的测试数据:

ID,TITLE,FNAME,SNAME,GENDER,PHONE,MOBILE,DOB,
1,Mrs,Sue,Mac,Female,01702 11000,07961111111,23/4/1958 
01,Mrs,Sue,Mac,Female,1702 11000,07961111111,23/4/1958 
2,Mr,Jim,Bell,Male,01698502269,07961111111,5/5/1958 
3,Mr,John,Smith,Male,,,,,,,,17/5/1958 00:00:00
4,,Batman,Smith,,,,,,,01389 111 111,07961111111,29/5/1958      
04,,Batman,Smith,,,,,,,1389 111 111,07961111111,29/5/1958      
5,Mr.,Hulk,Smith,Male,01389 111 111,07961111111,2/6/1958 
6,Mr.,Hulk,Briggs,Male,21,07961111111,6/6/1958 
06,Mr.,Hulk,Briggs,Male,21,7961111111,6/6/1958 
7,Mr.,Mike,Brigs,Male,15-20,07961111111,6/6/1958 
8,Mr.,Mike,Briggs,Female,20,07961111111,6/6/1958 
9,Mr,David,Golden,Male, 01254 111111,07961111111,10/6/1958
10,Mr,Pete,Lee,Male,020 7111 1111,07961111111,22/6/1958 
11,Ms,Karren,Lee,Female,02881111111,07961111111,4/7/1958 
12,Ms,Lisa,Bond,Female,,,,,,01411111100,07961111111,16/7/1958 
13,Mr,Murdasa,Smith,Male,01268 000 000,07961111111,20/7/1958 
14,,Brian,Smith,,(0)1753 604000,07961111111,24/7/1958 
15,,Brian,Smith,,12 (0)1753 604000,07961111111,24/8/1958 
015,,Brian,Smith,,12 ()1753 604000,07961111111,24/8/1958 

您应该将 \d(任何数字)替换为 [1-9](任何数字 0)。

如果我没看错,你需要的正则表达式模式是:\b([1-9](\d *){9})\b,你可以将{9}调整为{8,10},具体取决于所需的phone数字长度。


编辑:添加了单词边界(\b)并让模式忽略入站空格

看来您需要匹配的符号甚至少于 11 个。 您可以使用 (?<=,)\b[1-9][0-9 ]{3}[ 0-9]{6,} 正则表达式来获取 phone 号码。

匹配了这些行:

  • 01,Mrs,Sue,Mac,女,1702 11000,07961111111,23/4/1958
  • 04,蝙蝠侠,史密斯,1389 111 111,07961111111,29/5/1958
  • 06 先生,绿巨人,布里格斯,男,21 岁,7961111111,1958 年 6 月 6 日

您错过了结束边界,因此您获得了 11 位数字的所有前 10 位数字。

尝试 (\b[0-9]{10}\b)

但这会找到 Mr. Hulk Briggs 的 phone 号码,这与号码中是否有 0 无关。

不确定你的问题是否正确。您是否正在寻找不以 0 数字开头的数字?您是否在寻找任何没有零的数字?

"Not a zero"就是[1-9],但是不是直接用那个那么简单,因为你的phone有些数字有空格,你需要确定你没有开始匹配部分通过数字。

试试这个:

(?<=,)[1-9][0-9 ]{8,10}(?=,)

live demo

这在逗号之间匹配(但不包括它们)并允许数字的长度为 9 到 11(您可以通过更改长度范围轻松调整)。

检测测试样本中缺少前导 0 的所有 phone 数字的正则表达式是:

\b(?<!\(0\))[1-9](?: ?\d){8,9}\b

或注释形式:

\b            (?# detect leading word boundary)
(?<!\(0\))    (?# confirm that it is not preceded by parenthesized 0)
[1-9]         (?# detect a non-zero digit)
(?: ?\d){8,9} (?# detect 8-9 digits, each possibly preceded by a space)
\b            (?# detect trailing word boundary)