0 xxxxxxxxx \n -6ren">
gpt4 book ai didi

c# - (C#) Regex.Matches 找出最小长度匹配字符串

转载 作者:行者123 更新时间:2023-11-30 15:16:52 28 4
gpt4 key购买 nike

我需要找到最小长度的匹配字符串,但我的代码显示完全相反,我该如何解决?

string line = @"xxxxxxxxxxxx A(a,b) and A(a,b) > 0 xxxxxxxxx \n xxxxxxxxx A(a,b) and A(a,b) > 0 xxxxxxxxxxxxxxxxxx";
string Pattern = "A.+?>";
MatchCollection M1 = Regex.Matches(line, Pattern);
Console.WriteLine(M1[0].ToString()); //I want 【A(a,b) >】 but it shows 【A(a,b) and A(a,b) >】
Console.WriteLine(M1[1].ToString()); //I want 【A(a,b) >】 but it shows 【A(a,b) and A(a,b) >】
Console.Read();

最佳答案

问题是您的模式从它找到的第一个 A 开始,然后匹配直到它找到下一个 > - 但正如您所见 - 可能还有另一个A 在中间。
这在此处的第二个示例中得到了很好的解释:https://stackoverflow.com/a/3075532/7586

最简单的选择是明确匹配你想要的而不是.+,例如:

string Pattern = @"A\(\w+,\w+\)\s*>";

Working example

正如评论所建议的那样,否定字符类也可以工作,例如 A[^A]+> ,或者如果限制太多,A\([^()]+\)\s*> .

在这种情况下可以使用的另一个选项是使用 RightToLeft matching ,像这样:

MatchCollection M1 = Regex.Matches(line, Pattern, RegexOptions.RightToLeft);

RightToLeft 将从 > 符号开始,然后惰性 quntifier .+ 将按您预期的方式运行 - 仅到达第一个 <它找到的 code>A。这有一个对称问题,可能会因多个 > 而失败。
Working example

关于c# - (C#) Regex.Matches 找出最小长度匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48395325/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com