python中的正则表达式 - 无法找到特定的字符串

时间:2015-12-21 11:37:20

标签: python regex

我开始在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.

我做错了什么?

3 个答案:

答案 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,您可以测试正则表达式,并参考一个很好的备忘单。