C# 括号内由相同字符拆分的正则表达式

C# 括号内由相同字符拆分的正则表达式,c#,regex,C#,Regex,我有一根很长的绳子,就像这样: (A) name1, name2, name3, name3 (B) name4, name5, name7 (via name7) ..... (AA) name47, name47 (via name 46) (BB) name48, name49 目前,我以“(“但它将via作为新的线路使用”) 如何仅在第一个括号内拆分信息?没有AB、AC、AD等。括号内的字符始终相同 谢谢。您可以在这里使用匹配方法,因为您需要的模式将包含一个捕获组,以便能够匹配相同的字

我有一根很长的绳子,就像这样:

(A) name1, name2, name3, name3 (B) name4, name5, name7 (via name7) ..... (AA) name47, name47 (via name 46) (BB) name48, name49
目前,我以“(“但它将via作为新的线路使用”)

如何仅在第一个括号内拆分信息?没有AB、AC、AD等。括号内的字符始终相同

谢谢。

您可以在这里使用匹配方法,因为您需要的模式将包含一个捕获组,以便能够匹配相同的字符0次或更多次,并且
Regex.Split
将所有捕获的子字符串与非匹配项一起输出

我建议

(?s)(.*?)(?:\(([A-Z])\2*\)|\z)
获取所有非空的第1组值。看

详细信息

  • (?s)
    -一个dotall,
    RegexOptions。使
    与换行符匹配的单线
    选项
  • (.*)
    -第1组:任何0个或更多字符,但尽可能少
  • (?:\([A-Z])\2*\)\Z)
    -匹配以下内容的非捕获组:
    • \([A-Z])\2*\
      -
      ),然后第2组捕获任何大写ASCII字母,然后捕获该字母的任何0个或更多重复,然后
    • |
      -或
    • \z
      -字符串的最末端
在C#中,使用

var results=Regex.Matches(文本,@“(?s)(.*?(:\([A-Z])\2*\)\124;\ Z)”)
.Cast()
.Select(x=>x.Groups[1]。值)
.Where(z=>!string.IsNullOrEmpty(z))
.ToList();

请参阅。

Try
Regex.Matches(text,@“(?s)(.*?(:\([A-Z])\2*\)\124;\ Z)”).Cast().Select(x=>x.Groups[1].Value.ToList()
我将在早上试一试。我注意到有一个2*,它可以上升到像MMMMM甚至aaaaa这样的东西。不确定2是否可以覆盖,但6可以覆盖?有没有办法将原始(a)保留在匹配字符串中?一旦我有权访问我的桌面,我将发布一个测试片段,我现在在移动设备上。对于像我一样不理解您尝试执行的操作的观众,请编辑以显示示例所需的结果。是否希望在每个
”(“
后面跟一串大写字母,后面跟
”)上拆分“
”?如果是这样的话,这句话几乎描述了一个您可以使用的正则表达式。嗯,我的猜测似乎与其他评论中反映的对问题的理解不一致。
(?s)(.*?)(?:\(([A-Z])\2*\)|\z)
var results = Regex.Matches(text, @"(?s)(.*?)(?:\(([A-Z])\2*\)|\z)")
        .Cast<Match>()
        .Select(x => x.Groups[1].Value)
        .Where(z => !string.IsNullOrEmpty(z))
        .ToList();