Python 你知道你是谁吗?这里';这是一个挑战

Python 你知道你是谁吗?这里';这是一个挑战,python,regex,Python,Regex,下面是一个小问题:如何使角色集与以前捕获的角色不匹配 r'(.)[^\1]' # doesn't work 这是。。。脂肪它是(简单)加密程序的一部分。假设“hobo”被编码为“fxgx”。程序只获取编码文本,并且必须计算它可能是什么,因此它生成模式: r'(.)(.)(.)\2' # 1st and 3rd letters *should* be different! 现在它(正确地)匹配了“流浪汉””,但也匹配了“hoho”(想想看!)。我试过这样的方法: r'(.)([^\1])([^

下面是一个小问题:如何使角色集与以前捕获的角色不匹配

r'(.)[^\1]' # doesn't work
这是。。。脂肪它是(简单)加密程序的一部分。假设“hobo”被编码为“fxgx”。程序只获取编码文本,并且必须计算它可能是什么,因此它生成模式:

r'(.)(.)(.)\2' # 1st and 3rd letters *should* be different!
现在它(正确地)匹配了“流浪汉””,但也匹配了“hoho”(想想看!)。我试过这样的方法:

r'(.)([^\1])([^\1\2])\2' # also doesn't work
还有许多变化,但唉!阿拉克

请帮忙

另外,解决方法(我必须实施)是只检索“流浪汉”以及“hoho”,然后过滤结果(如果你明白我的意思的话,丢弃“hoho”)

p.p.S.现在我想要一个hoho

答案是

是的,我重新阅读了文档,它确实说:

在字符类的“[”和“]”内,所有数字转义都是 作为字符处理

以及:

特殊角色在场景中失去了特殊意义

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

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

第一个字母和第三个字母应该不同

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

你试图发现的那种语法(‫‪重叠‬‬) 不规则。此外,它不是上下文无关的


Automata是一种使正则表达式匹配非常有效的机制。

使用包含后向引用的负前瞻。您在任务中使用了错误的工具。将后向引用放在方括号中是错误的。要将字符串与所有不同的字母匹配,应使用集合并检查计数对于不同的字符。使用正则表达式,您可以实现这一点,但使用任意数量的字符只是一种过度使用。要匹配以3个不同字母开头的单词,请使用
re.match(r'([a-z])(?!\1)([a-z])(?!\1|\2)([a-z]),s)
@Eugene Morozov先生,我相信你是对的!不知道自动机是什么意思,但你是对的,不能用Python实现。不能用任何正则表达式实现。不仅仅是Python。@user1547581自动机是一种机制,它允许正则表达式匹配如此高效。