我想检查列表中的某些参数是否匹配某种模式(两个大写字母,后跟一个整数: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))))
答案 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]+