Python 正则表达式匹配 return 所有匹配

Python regex matching return all matches

我有由字母和数字组成的字符串,例如:

Ex1: "Phone 18020210 914 171 717 邮箱 43, 1003 Florvaag"

Ex2: "Phone 18020210 N 0914 171 717 邮箱 43, 1003 Florvaag"

Ex3: "Phone 18020210 N0914 171 717 邮箱 43, 1003 Florvaag"

我想找到像“914 171 717”和“0210 914 171”这样出现的数字,例如。九位数字的前面可以是零,也可以是 space.

我试过这个:

re.findall('[\s|0]\d{3}\s\d{3}\s\d{3}\s',Ex1)

但是这个表达式只有 returns ['0210 914 171'],而我希望它 return 两个数字:['0210 914 171','914 171 717']

这可能是一个快速修复,但我不知道该怎么做。

您可以使用

re.findall(r'\b0?\d{3}\s\d{3}\s\d{3}\b', text)

参见regex demo

详情:

  • \b - 单词边界
  • 0? - 一个可选的 0
  • \d{3} - 三位数
  • \s - 一个空格
  • \d{3} - 三位数
  • \s\d{3} - 空格,三位数
  • \b - 单词边界。

参见 Python demo:

import re
s = 'Phone 18020210 914 171 717 mailbox 43, 1003 Florvaag\nEx2: "Phone 18020210 N 0914 171 717 mailbox 43, 1003 Florvaag\nPhone 18020210 N0914 171 717 mailbox 43, 1003 Florvaag'
print( re.findall(r'\b0?\d{3}\s\d{3}\s\d{3}\b', s) )
# -> ['914 171 717', '0914 171 717']