结合几个正则表达式

时间:2018-11-05 18:00:40

标签: regex expression combinations

因此我在查找不同类型的电话号码时遇到问题:

它们可以采用以下格式:

+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}/

我为每个表达式编写了正则表达式,但不确定如何将其组合成一个大表达式以查找所有表达式。

我如何将其组合成一个大表达式,以便在处理数字文件时可以找到所有这些数字格式。

2 个答案:

答案 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