Python正则表达式匹配字母序列

时间:2011-06-10 17:02:54

标签: python regex sequence

我想制作正则表达式以匹配“AGGH”,“TIIK”,“6 ^^?”或者不是“AGGA”,“ABCD”。基本上它的字母模式很重要。有没有办法要求你拥有或以前没有的角色?

4 个答案:

答案 0 :(得分:2)

您可以像这样提取字符串的模式:

def pattern(s):
    d = {}
    return [d.setdefault(c, len(d)) for c in s]

示例:

>>> pattern("AGGH")
[0, 1, 1, 2]
>>> pattern("TKKG")
[0, 1, 1, 2]
>>> pattern("AGGA")
[0, 1, 1, 0]
>>> pattern("ABCD")
[0, 1, 2, 3]

这个函数使得比较两个字符串的模式变得微不足道。

答案 1 :(得分:1)

有一种方法可以使用正则表达式:

import re
strs=("AGGH", "TIIK", "6^^?" ,"AGGA", "ABCD")
p = re.compile('^(?P<one>.)(?P<two>.)(?P=two)(?!(?P=one)).$')
for s in strs:
    print s, p.match(s)

输出:

AGGH <_sre.SRE_Match object at 0x011BFC38>
TIIK <_sre.SRE_Match object at 0x011BFC38>
6^^? <_sre.SRE_Match object at 0x011BFC38>
AGGA None
ABCD None

这很难看,但它确实有效。 ;)如果要匹配字符串的结尾,则需要美元符号之前的时间段,它消耗由(?!(?P = 1))扫描的实际字符,这是“负前瞻断言”。

答案 2 :(得分:0)

为什么不使用子字符串搜索?

if "AGGH" in myStr:
    print "Success!"

答案 3 :(得分:0)

是的,您可以使用条件正则表达式:

(?(id/name)yes-pattern|no-pattern)

请参阅http://docs.python.org/library/re.html

上的详细信息