我在Python中寻找像r"[^\1]"
这样的东西。
例如,我希望在文本中匹配像“hello”这样的单词,其中每个字母都被另一个字母替换(例如:“ a ”by“ z “,” b “by” r “,...)。 “你好”可以是“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])"
(不起作用)
答案 0 :(得分:1)
在这里试试
^([a-z])(?!\1)([a-z])(?!(?:\1|\2))(([a-z])\4)(?!(?:\1|\2|\4))[a-z]
我在线测试here on rubular
第二个例子的问题是,负前瞻断言是非消费的。这意味着你需要在检查完字符后对其进行消除。我在.
和参考文献的每个前瞻后都会这样做。
您的第一个示例的问题是,您无法将这些引用放在字符组中。
更新:我更新了我的正则表达式和rubular链接,因为第一个版本在第一个版本之后允许使用除[a-z]
之外的其他字符。
答案 1 :(得分:0)
根据documentation,您可以使用(?P<name>...)
创建一个以后可以使用(?P=name)
引用的命名组。