如何使用正则表达式在 C# 中获取匹配的子组
本文关键字:获取 何使用 正则表达式 | 更新日期: 2023-09-27 18:37:16
我有一个字符串:
{Lower Left ( 460700.000, 2121200.000)}
这是我的代码:
var pat = @"Lower Left's*'('s*['d'.]+',('s)*['d'.]+')";
var r = new Regex(pat, RegexOptions.IgnoreCase);
var m = r.Match(s);
m.Groups[0] 现在等于:
{Lower Left ( 460700.000, 2121200.000)}
但是我想在两个变量中获取坐标字符串,例如 X 和 Y。 怎么办?
你可以
这样做:
string s = "{Lower Left ( 460700.000, 2121200.000)}";
var pat = @"Lower Left's*'('s*('d+'.'d+)','s*('d+'.'d+)')";
var r = new Regex(pat, RegexOptions.IgnoreCase);
var m = r.Match(s);
Console.WriteLine(m.Groups[1]); // first number
Console.WriteLine(m.Groups[2]); // second number
如果您的号码可能包含也可能不包含.
,您可以使用:
string s = "{Lower Left ( 460700.000, 2121200.000)}";
var pat = @"Lower Left's*'('s*('d+(?:'.'d+)?)','s*('d+(?:'.'d+)?)')";
var r = new Regex(pat, RegexOptions.IgnoreCase);
var m = r.Match(s);
Console.WriteLine(m.Groups[1]);
Console.WriteLine(m.Groups[2]);
这将接受这个数字:123456
(无点)、123.456
(里面有一个点),但不接受123.456.7
(两个点)或1234.
(最后的点)。
第一组 allways 返回整个匹配项,而索引组包含匹配组的实际值。因此,您需要相应地m.Groups[1]
和m.Groups[1]
。
您还可以为组命名:
@"Lower Left's*'('s*(?<X>'d+'.'d+),('s)*(?<Y>'d+'.'d+)')";
其中(?<identifier>anyPattern)
表示构建一个名为 identifier
的匹配组,并具有 anyPattern
给出的模式。允许您像这样访问它们:
m.Groups["X"]
m.Groups["Y"]
方括号([]
)也根本不需要,因为这意味着"一个数字('d+
)或一个点",而不是"一个数字后跟一个点,然后是一个数字"。