如何在Python中使用组合补?
我在找类似于 r"[^\1]"
的东西,用在Python里。比如说,我想在一段文字中找到像 "hello" 这样的单词,但每个字母都被替换成了其他字母(例如:"a" 被替换成 "z","b" 被替换成 "r",等等)。所以 "hello" 可能变成 "zcuuj"、"prvva" 等等。我想告诉Python:“帮我找一个以 [a-z]
开头的单词,然后是一个不是第一个字母的字母,再接着是两个相同的字母,最后是一个不同于前面字母的字母。”
我试过这个模式:
r"([a-z])([^\1])([^\1\2]){2}([^\1\2\3])"
(没成功)
还有这个:
r"([a-z])((?!\1))((?!\1|\2)){2}((?!\1|\2|\3])"
(也没成功)
2 个回答
0
根据文档,你可以使用(?P<name>...)
来创建一个命名组,这样你以后就可以用(?P=name)
来引用它。
1
你可以在这里试试
^([a-z])(?!\1)([a-z])(?!(?:\1|\2))(([a-z])\4)(?!(?:\1|\2|\4))[a-z]
我在网上测试过,可以在这个网站上查看结果
你第二个例子的问题是,负向前瞻断言是非消耗性的。这意味着在检查完字符后,你需要继续处理这些字符。我在每次进行前瞻检查后,都会用.
和引用来处理。
你第一个例子的问题是,不能把那些引用放在字符组里面。
更新:我更新了我的正则表达式和rubular链接,因为第一版会允许在第一个字符后出现其他字符,而不仅仅是[a-z]
。