我想制作正则表达式以匹配“AGGH”,“TIIK”,“6 ^^?”或者不是“AGGA”,“ABCD”。基本上它的字母模式很重要。有没有办法要求你拥有或以前没有的角色?
答案 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)
上的详细信息