因此我在查找不同类型的电话号码时遇到问题:
它们可以采用以下格式:
+xx xx xxxxxxxx - /[+][0-9]{2}\s[0-9]{2}[0-9]{8}/
xxxx xxxxxx - /[0-9]{4}\s[0-9]{6}/
xxxxx xxxxxx - /[0-9]{5}\s[0-9]{6}/
xxxxxxxxxxx - /[0-9]{11}
+xx xxxxxxxxxx - / [+][0-9]{2}\s[0-9]{10}
xxxx xxxxxxxxxx - /[0-9]{4} \s0-9]{10}/
我为每个表达式编写了正则表达式,但不确定如何将其组合成一个大表达式以查找所有表达式。
我如何将其组合成一个大表达式,以便在处理数字文件时可以找到所有这些数字格式。
答案 0 :(得分:2)
如果您只想要一个捕获所有这些情况的正则表达式,则可以将提供的情况“或”在一起:
(?:[+][0-9]{2}\s[0-9]{2}[0-9]{8})|(?:[0-9]{4}\s[0-9]{6})|(?:[0-9]{5}\s[0-9]{6})|(?:[0-9]{11})|(?:[+][0-9]{2}\s[0-9]{10})|(?:[0-9]{4} \s0-9]{10})
我只是将每个正则表达式包装在一个非捕获组(?:)
中,或者将它们|
包裹在一起。
但是,这与遍历并逐个检查每个正则表达式没有什么不同,并且可维护性要差得多。我会逐一检查案件。
答案 1 :(得分:0)
由于您的格式实际上只是文本字符串,所以
+xx xx xxxxxxxx
xxxx xxxxxx
xxxxx xxxxxx
xxxxxxxxxxx
+xx xxxxxxxxxx
xxxx xxxxxxxxxx
如果您通过此tool
运行格式,它将为您提供这样的正则表达式
\+xx [ ] xx
(?: [ ] )?
xxxxxxxx
| xxxx
(?:
[ ] xxxxxx
(?: xxxx )?
| x
(?: [ ] )?
xxxxxx
)
只需将[ ]
替换为\s{1,9}
,将x
替换为\d
给出最终的正则表达式
\+\d{2}\s{1,9}\d{2}(?:\s{1,9})?\d{8}|\d{4}(?:\s{1,9}\d{6}(?:\d{4})?|\d(?:\s{1,9})?\d{6})
https://regex101.com/r/nF2L9T/1
\+ \d{2} \s{1,9} \d{2}
(?: \s{1,9} )?
\d{8}
|
\d{4}
(?:
\s{1,9} \d{6}
(?: \d{4} )?
| \d
(?: \s{1,9} )?
\d{6}
)
由于这是一个完整的三元树,所以它可能比普通的三倍要快
一堆交替。
Regex1: \+\d{2}\s{1,9}\d{2}(?:\s{1,9})?\d{8}|\d{4}(?:\s{1,9}\d{6}(?:\d{4})?|\d(?:\s{1,9})?\d{6})
Options: < none >
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 6
Elapsed Time: 0.72 s, 715.33 ms, 715325 µs
Matches per sec: 419,389