繁体   English   中英

Python正则表达式检查长字符串匹配模式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM