Python正则表达式布尔测试字符串列表

时间:2018-06-25 15:35:06

标签: python regex string loops

我想检查列表中的某些参数是否匹配某种模式(两个大写字母,后跟一个整数:XX999999)。我使用的(python)正则表达式工作正常。但是,如果我遍历列表,则无法正确识别模式。

可能因为我以字符串str(string)显式调用list参数而导致测试失败?但是,如果我未明确将list参数作为字符串调用,则会收到错误消息(TypeError:预期的字符串或类似字节的对象)。

有什么想法吗?谢谢!

import re

# Is true
print(bool(re.match("^([A-Z]+[0-9]+)+$", "XZ291053")))

# Is false
print(bool(re.match("^([A-Z]+[0-9]+)+$", "ye291053")))

# Does not work
string = ['XZ291053','ye291053','AU291049','GI291053']
for s in string:
    print(bool(re.match("^([A-Z]+[0-9]+)+$", str(string))))

1 个答案:

答案 0 :(得分:2)

您可以使用列表推导来执行此操作,将正则表达式应用于列表中的每个字符串:

[re.match(r"^([A-Z]+[0-9]+)+$", i) for i in string]

要与您的原始帖子一致:

[bool(re.match(r"^([A-Z]+[0-9]+)+$", i)) for i in string]

这给出了:

[True, False, True, True]

此外,对您的正则表达式进行略微修改以匹配您对所需模式的描述:

^[A-Z]{2}[0-9]+