使用特定模式提取值

时间:2015-03-17 18:38:57

标签: c# regex string

我前段时间发现了这个,但我现在找不到它。

我想在C#中解析格式为"44°59'59.93\" N "的GPS坐标,以获取每个值的数组。 例如:

    degree:44
    minutes:59
    seconds:59.93
    direction:"N"

我认为解决方案必须像正则表达式或类似“{0}°{1}”{2} \“{3}”的模式,但我不知道用于将此GPS坐标拆分为什么函数一个数组。

2 个答案:

答案 0 :(得分:4)

根据以下正则表达式拆分输入。

string[] lines = Regex.Split(value, @"[°'""] *");

然后从索引0获得度数,从索引1获得分数,从索引2获得秒,从索引3获取方向。

Ideone

答案 1 :(得分:1)

您可以使用捕获组来获取您要询问的部分。

string value = @"44°59'59.93"" N";
var match = Regex.Match(value, @"(\d+)°(\d+)'([\d\.]+"")\s*([NSEW])");
if (m.Success) {
    //note that these are all strings and will need to be parsed into ints/doubles
    var degrees = m.Groups[0];
    var minutes = m.Groups[1];
    var seconds = m.Groups[2];
    var direction = m.Groups[3];
}

打破这个局面:

  • ( .. )表示"组" - 匹配的一部分,可以称为连续的块或子字符串。 (与{0}占位符相反)
  • \d将匹配一个数字。
  • +表示"一个或多个",因此\d+表示"一个或多个数字"
  • [ .. ]表示括号中任何内容的选择(对于简单的情况)
  • \s表示"空白"
  • *表示"零或更多"。因此,\s*表示"这里可能有一些空格,请继续使用#34;

如果有空格,您可能需要在其中添加一些额外的\s*来抓住空格。