查找缺少 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}(?=,)
这在逗号之间匹配(但不包括它们)并允许数字的长度为 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)
我在 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}(?=,)
这在逗号之间匹配(但不包括它们)并允许数字的长度为 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)