这里的骨感:你如何使一个字符集匹配不是一个以前被捕获的字符?想你知道Python RE吗?这里是一个挑战
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
和MANY的改变,但是唉!啪...
请帮忙!
P.S.解决方法(我必须实现)只是检索“hobo”以及“hoho”,然后只是过滤结果(丢弃“hoho”s),if你明白我的意思;)
PPS现在我想HOHO
VVVVV答案VVVVV
是的,我重新 -re-阅读文档,它并说:
在字符类的'['和']'内部,所有数字转义字符都是 作为字符对待。
除了:
特殊字符失去里面套了特殊的意义。
其中相当多的手段(我认为)不,你不能做任何事情一样:
re.compile(r'(.)[\1]') # Well you can, but it kills the back-reference!
感谢您的帮助!
使用包含反向引用的负向前视。 – Barmar
您正在使用错误的工具完成任务。在方括号中加入反向引用是错误的。 –
要匹配一个字符串与所有不同的字母,你应该使用一个集合,并检查不同字符的计数。用正则表达式,你可能会实现它,但随着任意数量的字符只是一个矫枉过正。要匹配以3个不同字母开头的单词,请使用're.match(r'([az])(?!\ 1)([az])(?!\ 1 | \ 2)([az])' ,s)' –