這裏的骨感:你如何使一個字符集匹配不是一個以前被捕獲的字符?想你知道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)' –