[英]Python Regex to Check Long List of Strings Match a Pattern
我想测试一个字符串:
BASE [AZ] +单字符{F,G,H,J,K,M,N,Q,U,V,X,Z} +单数值[0-9]
“ BASE”的长度至少为一个字符。
例如。 'ESZ6'-> True,'ESSP6'-> False
我能做到:
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)]
这是实现此目标的最佳方法吗?
这取决于“测试字符串”的含义。 您是否要检查整个字符串是否与您的模式匹配,或者该模式是否恰好出现在您的字符串中,例如“ 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)
模式匹配运算符仅匹配一个字符,无重复运算符,因此您不需要{1}指示。 处理模式时,请使用原始字符串r“ \\ d”,以防止Python弄乱您的反斜线。
您的描述和示例不完全匹配,因此我在这里进行一些假设。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.