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']
我有由字母和数字组成的字符串,例如:
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']