我想知道字符串中的“xy”是否是可选的,对于每个字符它只能出现一次。例如:
def findpat(texts, pat):
for text in texts:
if re.search(pat, t):
print re.search(pat, t).group()
else:
print None
pat = re.compile(r'[xy]*?b')
text = ['xyb', 'xb', 'yb', 'yxb','b', 'xyxb']
findpat(text, pat)
# it prints
# xyb
# xb
# yb
# yxb
# b
# xyxb
对于最后一个,我想要的输出是“yxb”。 我应该如何修改我的正则表达式?非常感谢
你可以用这个模式
要分解,有趣的部分
x?y?|yx
将匹配:作为一个建议,当您对regex不太满意并且场景数量很少时,您可以简单地强制模式。这很难看,但它清楚地表明了你的情况:
^{pr2}$第2部分。
对于一个通用的解决方案,它也会这样做,但是对于任意数量的字符,而不仅仅是{x,y},可以使用以下regex样式:
我来解释一下:
[^x]*x?[^x]*
,这意味着匹配not-x如果有,最多匹配一个x,然后匹配任意数量的not x注意:我强烈怀疑它的性能很差,因为它有回溯功能。你应该只对小的测试字符串使用它。在
Test it.
嗯,真正通过测试用例的regexp是:
其中“$”将字符串锚定在末尾,从而确保它是最后找到的匹配项。在
然而,使用regexp机制来确保只使用集合中的一个匹配字符会有点棘手。。。在
您可以使用以下方法:匹配并捕获两个组,
([xy]*)(b)
。然后,一旦找到匹配项,检查组1中的值的长度是否与该值中的唯一字符数相同。如果不是,请从组值的开头删除字符,直到获得长度为唯一字符数的字符串。在比如:
参见Python demo
相关问题 更多 >
编程相关推荐