这里是瘦的:如何使字符集匹配不是以前捕获的字符?
r'(.)[^\1]' # doesn't work
这是呃......胖子?它是(简单)加密程序的一部分。假设" hobo "编码为" fxgx "。该程序只获取编码文本,并且必须计算它可能是什么,因此它生成模式:
r'(.)(.)(.)\2' # 1st and 3rd letters *should* be different!
现在它(正确地)匹配" hobo ",但也匹配" hoho " (想想吧!)。我尝过这样的话:
r'(.)([^\1])([^\1\2])\2' # also doesn't work
和 MANY 变种但唉!呜呼...
请帮忙!
P.S。解决方法(我必须实现)只是检索" hobo "以及" hoho &# 34; s,然后只过滤结果(丢弃" hoho " s),如果你抓住我的漂移;)
P.P.S现在我想要一个hoho
是的,我重新 - 阅读文档并确实说:
在' ['和']'一个字符类,所有数字转义都是 被视为人物。
以及:
特殊角色在内部失去了特殊意义。
这几乎意味着(我认为)不,你不能做任何事情:
re.compile(r'(.)[\1]') # Well you can, but it kills the back-reference!
感谢您的帮助!
答案 0 :(得分:3)
第1和第3个字母应不同!
使用正则表达式(不仅仅是python的实现)无法检测到这一点。更具体地说,使用没有内存的自动机无法检测到它。你必须使用不同类型的自动机。
您尝试发现的语法(重复)并不常见。而且,它不是没有背景的。
Automata 是允许正则表达式匹配如此高效的机制。