gpt4 book ai didi

c# - C# 中的正则表达式组

转载 作者:IT王子 更新时间:2023-10-29 03:57:00 26 4
gpt4 key购买 nike

我继承了一个包含以下正则表达式的代码块,我正在尝试了解它是如何获得结果的。

var pattern = @"\[(.*?)\]";
var matches = Regex.Matches(user, pattern);
if (matches.Count > 0 && matches[0].Groups.Count > 1)
...

对于输入 user == "Josh Smith [jsmith]":

matches.Count == 1
matches[0].Value == "[jsmith]"

...我明白了。但是然后:

matches[0].Groups.Count == 2
matches[0].Groups[0].Value == "[jsmith]"
matches[0].Groups[1].Value == "jsmith" <=== how?

查看this question据我了解,Groups 集合存储了整个匹配项以及上一个匹配项。但是,上面的正则表达式不只匹配 [open square bracket] [text] [close square bracket] 那么为什么“jsmith”会匹配?

此外,groups 集合是否总是恰好存储 2 个组:整个匹配项和最后一个匹配项?

最佳答案

  • match.Groups[0]始终与 match.Value 相同,这是整场比赛。
  • match.Groups[1]是正则表达式中的第一个捕获组。

考虑这个例子:

var pattern = @"\[(.*?)\](.*)";
var match = Regex.Match("ignored [john] John Johnson", pattern);

在这种情况下,

  • match.Value"[john] John Johnson"
  • match.Groups[0]始终与 match.Value 相同, "[john] John Johnson" .
  • match.Groups[1]是来自 (.*?) 的捕获组.
  • match.Groups[2]是来自 (.*) 的捕获组.
  • match.Groups[1].Captures是另一个维度。

考虑另一个例子:

var pattern = @"(\[.*?\])+";
var match = Regex.Match("[john][johnny]", pattern);

请注意,我们正在查找一行中一个或多个括号中的名称。您需要能够分别获取每个名称。输入 Captures !

  • match.Groups[0]始终与 match.Value 相同, "[john][johnny]" .
  • match.Groups[1]是来自 (\[.*?\])+ 的捕获组.与match.Value相同在这种情况下。
  • match.Groups[1].Captures[0]match.Groups[1].Value相同
  • match.Groups[1].Captures[1][john]
  • match.Groups[1].Captures[2][johnny]

关于c# - C# 中的正则表达式组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6375873/

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