我想测试一个字符串:
BASE [A-Z] +单个CHAR {F,G,H,J,K,M,N,Q,U,V,X,Z} +单个数字[0-9]
'BASE'至少有一个字符。
例如。 'ESZ6' - >是的,'ESSP6' - >假
我很感激我能做到:
import re
prog = re.compile('[A-Z]+[FGHJKMNQUVXZ]{1}[\d]{1}')
...
if prog.search(string):
print('This matched...')
然后我想用:
matches = [i for i in items if prog.search(item)]
这是实现此目的的最佳方式吗?
答案 0 :(得分:1)
这取决于你的意思,'测试一个字符串'。您想检查整个字符串是否与您的模式匹配,或者是否恰好在您的字符串中出现了模式,例如'ESZ6'与“我有一个ESZ6在我的口袋里烧了一个洞。”其他角色能否与你的目标相邻,例如'123ESZ6ARE'?
假设我们只测试'ESZ6'和'ESSP6'等个别令牌,那么这里有一些代码想法:
import re
items = ('ESZ6', 'ESSP6')
prog = re.compile(r"[A-Z]+[FGHJKMNQUVXZ]\d$")
matches = [item for item in items if prog.match(item)]
除非您需要非锚定搜索,否则请使用.match()而不是.search()。如果您希望结束无锚,请删除最终的'$'。 (如果使用Python 3.4或更高版本,并希望进行锚定搜索,则可以删除'$'并使用.fullmatch而不是.match)
模式匹配运算符只匹配一个字符sans重复运算符,因此您不需要{1}指示。在处理模式时使用原始字符串r“\ d”,以防止Python乱用你的反斜杠。
您的描述与示例完全不符,所以我在这里做了一些假设。