我有一个字符串:
{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.怎么做?
答案 0 :(得分:1)
第一组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"]
方括号([]
)根本不需要,因为这意味着“数字od数字(\d+
)或点数”,而不是“数字跟随的数字”用一个点后跟一些数字“。
答案 1 :(得分:1)
你可以这样做:
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.
(两个点)或{{1}}(点在结束)。