认为你知道Python RE?这是一个挑战

时间:2017-06-01 05:59:27

标签: python regex

这里是瘦的:如何使字符集匹配不是以前捕获的字符?

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

VVVVV答案VVVVV

是的,我重新 - 阅读文档并确实说:

  

在' ['和']'一个字符类,所有数字转义都是   被视为人物。

以及:

  

特殊角色在内部失去了特殊意义。

这几乎意味着(我认为)不,你不能做任何事情:

re.compile(r'(.)[\1]') # Well you can, but it kills the back-reference!

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

  

第1和第3个字母不同!

使用正则表达式(不仅仅是python的实现)无法检测到这一点。更具体地说,使用没有内存的自动机无法检测到它。你必须使用不同类型的自动机。

您尝试发现的语法(重复)并不常见。而且,它不是没有背景的。

Automata 是允许正则表达式匹配如此高效的机制。