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))
基本上,我的正则表达式有三个部分:
任何人都可以帮忙吗?只需添加一个否定的前瞻(即,
(?!\2)
),以确保第一个匹配的字母不会重复,并保持第三组不变(您仍然需要它):
请注意,{1}
的用法是多余的,所以我删除了它们
演示:只需添加一个负前瞻(即,
(?!\2)
),以确保第一个匹配的字母不会重复,并保持第三组不变(您仍然需要它):
请注意,{1}
的用法是多余的,所以我删除了它们
演示:太棒了!谢谢成功了。请您告诉我,我是否希望它不仅选择一个字符,而且选择多个相同的字符,以便它也可以选择此
ooonoo
只需在第二个捕获组中添加一个+
。请注意,这将与您提供的示例中的ono
、oonoo
和oonooo
相匹配。太棒了!谢谢:)但是这个+
将不仅选择oonoo
,而且还将匹配aonao
,因为我们不会强迫团队选择相同的字符你是对的,我的坏!您可以使用。另外,请注意,没有理由将最后一个[a-z]
放在捕获组中,除非你有什么需要。太好了!谢谢成功了。请您告诉我,我是否希望它不仅选择一个字符,而且选择多个相同的字符,以便它也可以选择此ooonoo
只需在第二个捕获组中添加一个+
。请注意,这将与您提供的示例中的ono
、oonoo
和oonooo
相匹配。太棒了!谢谢:)但是这个+
将不仅选择oonoo
,而且还将匹配aonao
,因为我们不会强迫团队选择相同的字符你是对的,我的坏!您可以使用。另外,请注意,没有理由将最后一个[a-z]
放在捕获组中,除非您需要它做些什么。