正则表达式仅在有N个唯一字符时匹配

时间:2013-12-09 10:13:43

标签: .net regex

有没有办法定义正则表达式,只有在至少有N个唯一字符时才会匹配?

示例:(N = 3)

aba  => no match  
abc  => match
abbc => match
ab   => no match
abcd => match

3 个答案:

答案 0 :(得分:4)

不是,这不是正则表达式问题。

更简单的解决方案是使用类似HashSet(T)

的集合
  1. 将字符串拆分为字符,并将每个字符串添加到集合中。

  2. 计算集合中的元素数量。

答案 1 :(得分:1)

使用regex这些问题非常棘手。

SInce问题被标记为 regex ,您可以尝试基于此lookahead的正则表达式:

(.).*?((?!.*?\1).).*?((?!.*?\2).)
  • 首先,这匹配任何角色并捕获组#1
  • 中的角色
  • 然后在字符串中搜索任何不是组#1的字符并在组#2中捕获
  • 最后,它还在字符串中搜索任何不是组#2
  • 的字符

在线演示:http://regex101.com/r/dH1rP4

不匹配:

  1. ABA
  2. adaaaaaa
  3. aaaabbbb
  4. 匹配:

    1. ABC
    2. adaac
    3. ABBC
    4. adaaac
    5. 11112222220

答案 2 :(得分:0)

EDITED

/(?:(.)(?!.*?\1).*){3}/

使用所需的唯一字符值更改3

PREEDIT - 只是为了提供文件并保持评论的一致性,这是最初发布的答案

/^(?:(.)(?!.*\1.*$)){3}$/

不,它不是OP所需要的,我误解了这个问题。此正则表达式测试字符串是否仅由指定数量的唯一字符 形成。