我开始在python中学习正则表达式,我已经完成了以下任务:
我需要编写一个带有这两个字符串的脚本:
string_1 = 'merchant ID 1234, device ID 45678, serial# 123456789'
string_2 = 'merchant ID 8765, user ID 531476, serial# 87654321'
并仅显示其中包含merchant ID ####
和device ID ####
的字符串。
为了检查第一个条件,我写了以下一行:
ex_1 = re.findall(r'\merchant\b\s\ID\b\s\d+', string_1)
print (ex_1)
output: ['merchant ID 1234'] - works fine!
问题是我出于某种原因无法获得其他条件:
ex_2 = re.findall(r'\device\b\s\ID\b\s\d+', string_1)
output: [] - empty list.
我做错了什么?
答案 0 :(得分:5)
由于:
ex_2 = re.findall(r'\device\b\s\ID\b\s\d+', string_1)
^^
哪个匹配一个号码,但\m
中的\merchant
仍为m
。不过,您应该删除\
和\ID
之前的\device
:
>>> re.findall(r'device\b\sID\b\s\d+', string_1)
['device ID 45678']
答案 1 :(得分:1)
您的分组错误。使用括号进行分组:
(merchant ID \d+|device ID \d+)
e.g。
>>>re.findall('(merchant ID \d+|device ID \d+)', string_1)
['merchant ID 1234', 'device ID 45678']
答案 2 :(得分:0)
小心特殊字符'\'
。 '\device\'
与[0-9] + 'evice'
匹配。
使用Pythex,您可以测试正则表达式,并参考一个很好的备忘单。