使用正则表达式查找单词中的唯一字符

Finding unique characters in words with RegEx

我想使用 RegEx 来匹配只在该词中出现一次的序列中的字符。因此,例如在 armored armadillo 中,唯一的匹配项是 ei .

我的第一次尝试是使用环视来匹配字符,这样在匹配之前或之后都不会出现相同字符的副本:

(.)(?<!^.*)(?!.*$)

但是无论我做什么,这似乎都不匹配任何字符。我究竟做错了什么?如何以我想要的方式匹配字符?

您可以使用

(.)(?<!.+)(?!.*)

正则表达式将一个字符捕获到组 1 中,然后通过两次环视确保前后没有这样的字符。

要匹配包括换行符在内的任何字符,请将 . 替换为 [\s\S] 或在模式前加上 (?s) 内联修饰符((?m) in Ruby)。

详情

  • (.) - 第 1 组:任何单个字符(默认情况下除换行字符外)
  • (?<!.+) - 如果第 1 组值后跟一个或多个字符而不是换行字符,则匹配失败的负后视紧接在当前位置的左侧([=此处需要 17=] 以确保 . 匹配至少一个字符,即捕获到组 1)
  • 中的字符
  • (?!.*) - 如果有零个或多个字符而不是换行符,则匹配失败的否定前瞻,然后第 1 组值紧接在当前位置的右侧。

the regex demo