用于检查长字符串列表的Python正则表达式匹配模式

时间:2016-01-15 17:57:52

标签: python regex

我想测试一个字符串:

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)]

这是实现此目的的最佳方式吗?

1 个答案:

答案 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乱用你的反斜杠。

您的描述与示例完全不符,所以我在这里做了一些假设。