C# 正则表达式。排除匹配模式

C# 正则表达式。排除匹配模式,c#,regex,C#,Regex,我有一根弦 name1;name2;name4; vs name3;name4; name3;name4; vs name1;name2;name4; name3;name9; vs name1;name2;name8 vs name5;name4;name7; name3;name1; vs name1;name2;name4; name3;name1;name2 vs name1;name2; name3;name5; vs name1;name2;name4; 如何使用搜索条件修复正

我有一根弦

name1;name2;name4; vs name3;name4;  
name3;name4; vs name1;name2;name4;
name3;name9; vs name1;name2;name8 vs name5;name4;name7;
name3;name1; vs name1;name2;name4;
name3;name1;name2 vs name1;name2;
name3;name5; vs name1;name2;name4;
如何使用搜索条件修复正则表达式以获取前3个字符串:
name2
name4
应该与
vs
在不同的侧面

((.*name2.*;)|(.*name4.*;)).* vs .*?((.*name2.*;)|(.*name4.*;))
结果应该是这样

name1;name2;name4; vs name3;name4;  
name3;name4; vs name1;name2;name4;
name3;name9; vs name1;name2;name8 vs name5;name4;name7;

您可能正在寻找以下内容:

^.*\b(name2|name4)\b.* vs .*\b(?!\1)(name2|name4)\b.*$
在线查看


  • ^.*
    -开始字符串ancor并匹配除换行符以外的任何内容零次或多次
  • \b(name2 | name4)\b
    匹配单词边界,第一个捕获组匹配两个选项中的一个和另一个单词边界
  • *vs.*
    -匹配文本“vs”之前和之后的任何内容
  • \b(?!\1)
    -单词边界和捕获内容的负前瞻
  • (name2 | name4)\b
    -第二个捕获组,从两个选项中获取另一个选项,后跟另一个单词边界
  • *$
    -匹配字符串末尾的任何内容

    • 首先,让我确保我理解您的问题。如果我们考虑<代码> VS >代码>作为定界符,我们有两个或多个组/组/组名称。是否要匹配名称2和名称4不共享一组的行?您的输入示例中存在一些不一致之处。字符串的格式是否有可靠的规范

      如果我的假设是正确的,并且您的输入是正确的不一致的,您可以使用以下内容:

      ^.*\b(name2|name4)\b.* vs .*\b(?!\1)(name2|name4)\b.*$
      
      ^(?:(?:)?
      我们匹配排除2或4的重复组,其中每个名称可能以分号结尾,并且不被任何非空白字符包围


      将比我能解释的更好地解释分组。

      你能用一两个测试字符串分享一个预期结果的例子吗?在你的问题中,很难知道哪些字符串应该匹配,哪些不应该匹配。你能编辑你的问题,更好地阐述哪些应该匹配,哪些应该匹配吗不是吗?在问号中添加可以工作吗?@JvdV是的,工作很好!谢谢!作为回答plz发布,我会提交它“name”只是一个例子,这里可以是任何东西,比如“name.*race.*”;我想找到任何行,其中“name2 vs name4”或“name4 vs name2”