繁体   English   中英

正则表达式匹配单词,但不匹配整个字符串

[英]Regex match words, but not when the entire string is matched

我现在有这个正则表达式:

((\b(Example|Overflow|Test)\b)\s*(?!.*\2))+

这匹配预定义的单词,直到已经使用了一个单词(如果有的话)。 几个例子见下文(粗体匹配):

  1. 示例溢出测试溢出
  2. 示例溢出测试
  3. 只是一个例子溢出
  4. 另一个溢出示例

这是按照我的要求做的,但我想对第二个示例(示例溢出测试)进行特殊处理。 如果整个字符串都匹配(从头到尾),我不想再匹配第一个单词。 所以 2. 应该改为匹配“示例溢出测试”。 我原来的正则表达式有更多的词,所以我想避免重复这些,而是参考同一个捕获组,类似于我已经检查一个词是否已经被使用过。

由于您需要对匹配的一部分进行限制(如果有匹配的部分,您仍然希望匹配字符串的一部分),您可以使用类似

(?!^(?:\b(Example|Overflow|Test)\b(?!.*\b\1\b)\s*)+$)(?:\b(Example|Overflow|Test)\b(?!.*\b\2\b)\s*)+

请参阅正则表达式演示

如果列表中的单词是(??^(:?\b(Example|Overflow|Test)\b(.!.*\b\1\b)\s*)+$)否定前瞻取消匹配在开始时匹配,并且匹配跨越到 position 处的字符串结束。 请注意更改的反向引用编号和反向引用周围的附加字边界,以避免在前瞻中获得部分匹配。

在 C# 中,您可以使用变量定义重复模式,并在定义正则表达式的字符串文字中重用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM