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组值。看
详细信息
-一个dotall,(?s)
选项RegexOptions。使
与换行符匹配的单线
-第1组:任何0个或更多字符,但尽可能少(.*)
-匹配以下内容的非捕获组:(?:\([A-Z])\2*\)\Z)
-\([A-Z])\2*\
),然后第2组捕获任何大写ASCII字母,然后捕获该字母的任何0个或更多重复,然后(
)
-或|
-字符串的最末端\z
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();