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

时间:2020-07-28 05:46:10

标签: 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;

如何使用搜索条件修复正则表达式以获取前3个字符串:
name2name4应该和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;

2 个答案:

答案 0 :(得分:1)

您可能正在寻找类似的东西:

^.*\b(name2|name4)\b.* vs .*\b(?!\1)(name2|name4)\b.*$

查看在线demo


  • ^.*-启动字符串ancor并匹配除换行符以外的其他任何零次或多次。
  • \b(name2|name4)\b-匹配单词边界的第一个捕获组,以匹配两个选项中的一个和另一个单词边界。
  • .* vs .*-匹配文字“ vs”前后的所有内容。
  • \b(?!\1)-单词边界和捕获内容的负向查找。
  • (name2|name4)\b-第二捕获组,从两个选项中选出另一个,再加上另一个单词边界。
  • .*$-匹配所有内容以结束字符串ancor。

答案 1 :(得分:0)

首先,让我确保我了解您的问题。如果我们将package butterknife.internal; import android.support.annotation.NonNull; import android.view.View; public abstract class DebouncingOnClickListener implements View.OnClickListener { static boolean enabled = true; public final String name = "MyDebouncingOnClickListener"; private static final Runnable ENABLE_AGAIN = new Runnable() { @Override public void run() { enabled = true; } }; @Override public final void onClick(View v) { if (enabled) { enabled = false; // v.post(ENABLE_AGAIN); !!!The modified code is here!!!! v.postDelayed(ENABLE_AGAIN, 300); doClick(v); } } public abstract void doClick(View v); @NonNull @Override public String toString() { return super.toString(); } } 视为定界符,则我们有两个或多个名称/组/组。您要匹配name2和name4不共享集合的行吗?您的输入示例中有些不一致。字符串格式是否有可靠的规范?

IE

vs

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

name1;name2;name4; vs name3;name4;  *No match, name2 and name4 share set 1*
name3;name4; vs name1;name2;name4;  *No Match, name2 and name4 share set 2
name3;name9; vs name1;name2;name8 vs name5;name4;name7; *Match, name2 and name4 do not share a set
name3;name1; vs name1;name2;name4; *No match, name2 and name4 share set 2
name3;name1;name2 vs name1;name2; *Match? name2 and name4 do not share a set*

我们匹配排除2或4的重复组,其中每个名称可能以分号结尾,并且不被任何非空格字符包围。

https://regex101.com/r/fiVP7Q/1将比我可能更好地解释分组。