C# 匹配组先前选择的角色以外的任何内容

C# 匹配组先前选择的角色以外的任何内容,c#,regex,C#,Regex,我有一个正则表达式: (?=(([a-z]{1})([a-z]{1})\2)) (?=(([a-z]{1}) "([a-z]{1})" \2)) 通过它,我试图获取所有的回文字符串。如果这是我的字符串: mnonopooo 我的正则表达式确实选择了字符串中的所有回文字符串,但它也选择了ooo,我知道原因,这是因为正则表达式的中心部分: (?=(([a-z]{1})([a-z]{1})\2)) (?=(([a-z]{1}) "([a-z]{1})"

我有一个正则表达式:

(?=(([a-z]{1})([a-z]{1})\2))
(?=(([a-z]{1})     "([a-z]{1})"        \2)) 
通过它,我试图获取所有的回文字符串。如果这是我的字符串:

mnonopooo
我的正则表达式确实选择了字符串中的所有回文字符串,但它也选择了
ooo
,我知道原因,这是因为正则表达式的中心部分:

(?=(([a-z]{1})([a-z]{1})\2))
(?=(([a-z]{1})     "([a-z]{1})"        \2)) 
这部分应该是这样的,除了反向参考组
\2
之外,其他都匹配

所以我尝试了类似的方法,但没有成功:

(?=(([a-z]{1})     (?!\2)       \2)) 
基本上,我的正则表达式有三个部分:

  • 选择任意单个字符(此操作正常)
  • 匹配任何不等于第1点中匹配的字符的单个字符(不工作)
  • 选择在第1点中匹配的相同字符(使用反向引用工作)
  • 所以,第二部分我不能讲。
    任何人都可以帮忙吗?

    只需添加一个否定的前瞻(即,
    (?!\2)
    ),以确保第一个匹配的字母不会重复,并保持第三组不变(您仍然需要它):

    请注意,
    {1}
    的用法是多余的,所以我删除了它们


    演示:

    只需添加一个负前瞻(即,
    (?!\2)
    ),以确保第一个匹配的字母不会重复,并保持第三组不变(您仍然需要它):

    请注意,
    {1}
    的用法是多余的,所以我删除了它们


    演示:

    太棒了!谢谢成功了。请您告诉我,我是否希望它不仅选择一个字符,而且选择多个相同的字符,以便它也可以选择此
    ooonoo
    只需在第二个捕获组中添加一个
    +
    。请注意,这将与您提供的示例中的
    ono
    oonoo
    oonooo
    相匹配。太棒了!谢谢:)但是这个
    +
    将不仅选择
    oonoo
    ,而且还将匹配
    aonao
    ,因为我们不会强迫团队选择相同的字符你是对的,我的坏!您可以使用。另外,请注意,没有理由将最后一个
    [a-z]
    放在捕获组中,除非你有什么需要。太好了!谢谢成功了。请您告诉我,我是否希望它不仅选择一个字符,而且选择多个相同的字符,以便它也可以选择此
    ooonoo
    只需在第二个捕获组中添加一个
    +
    。请注意,这将与您提供的示例中的
    ono
    oonoo
    oonooo
    相匹配。太棒了!谢谢:)但是这个
    +
    将不仅选择
    oonoo
    ,而且还将匹配
    aonao
    ,因为我们不会强迫团队选择相同的字符你是对的,我的坏!您可以使用。另外,请注意,没有理由将最后一个
    [a-z]
    放在捕获组中,除非您需要它做些什么。