2011-05-28 158 views
1

我有一个HTML文件,我想提取的GPS坐标,我试图通过创建一个regEx来做到这一点,但迄今没有运气。正则表达式提取GPS坐标C#

我使用C#来解析HTML文件

这里是一个要被提取样本GPS数据。

S 33 58.254 E 023 53.269 

任何帮助,将不胜感激。

这是示范文本,其中GPS坐标指定

<span style="text-decoration: underline;">TOURIST INFORMATION</span><br> 
Tourism Office <span style="font-style: italic;">(S 33 58.254 E 023 
53.269, Gammasi St, 042-281-1098,) 

,我只需要解压出来S 33 58.254 E 023 53.269

+1

为什么使用RegEx而不是简单得多的'string.Split'? – Oded 2011-05-28 08:00:09

+0

@Oded我不认为'string.Split'是一个很好的选择。他想*提取* GPS代码,而不是解析GPS代码本身。 – 2011-05-28 08:12:25

+0

@Oscar - 他的编辑澄清了这一点。之前还不清楚。 – Oded 2011-05-28 08:13:37

回答

2

这是在C#中的例子,以防万一你需要解析的GPS,而不是只从HTML代码中提取出来:

var text = @"Some example that contains S 33 58.254 E 023 53.269 
        and also S 22 58.123 W 021 53.2"; 
var pattern = @"([SN])\s(\d+)\s(\d+(?:\.\d+)?)\s([EW])\s(\d+)\s(\d+(?:\.\d*)?)"; 
var m = Regex.Matches(text, pattern); 
for (int i = 0; i < m.Count; i++) { 
    Console.WriteLine("GPS Found: {0}", m[i].Value); 
    Console.WriteLine("-----"); 
    Console.WriteLine(m[i].Groups[1].Value); 
    Console.WriteLine(m[i].Groups[2].Value); 
    Console.WriteLine(m[i].Groups[3].Value); 
    Console.WriteLine(m[i].Groups[4].Value); 
    Console.WriteLine(m[i].Groups[5].Value); 
    Console.WriteLine(m[i].Groups[6].Value); 
    Console.WriteLine("-----"); 
} 

上面的例子会打印:

GPS Found: S 33 58.254 E 023 53.269 
----- 
S 
33 
58.254 
E 
023 
53.269 
----- 
GPS Found: S 22 58.123 W 021 53.2 
----- 
S 
22 
58.123 
W 
021 
53.2 
----- 

编辑:
我真的不知道像53.2这样的值是否可以是整数,如53,但我有计数以防万一。

1

这是一个基本的比赛,只是用它玩了一下,效果更佳:

[SN]\s\d+\s\d+\.\d+\s[EW]\s\d+\s\d+\.\d+ 
+0

它是'\ s'(小写's')的空格,而不是'\ S'。 – 2011-05-30 22:27:24

0

我会先检查“可能性”。我会写

[SN]\s-?\d{1,3]\s\d+\.\d+\s[EW]\s-?\d{1,3]\s\d+\.\d+

这仅仅是一个spitball好运!

0

如果你的数据模式是不变的,我指的是跨越式的部分(< span style="font-style: italic;" >

你为什么不干脆试试GetStringBetweenitalic;">(,

下面是我写我的使用方法:

public static string GetStringBetween(string input, int searchStartIndex, string startMarker, string endMarker, out int foundAtIndex) 
{ 
    foundAtIndex = -1; 
    if (input == null) 
     return null; 
    int st = searchStartIndex; 

    int startIndex = input.IndexOf(startMarker, st); 
    if (startIndex < 0) 
     return null; 
    int endIndex = input.IndexOf(endMarker, startIndex + startMarker.Length); 
    if (endIndex < 0) 
     return null; 
    int occurenceIndex = startIndex + startMarker.Length; 
    string data = input.Substring(occurenceIndex, endIndex - occurenceIndex); 
    foundAtIndex = occurenceIndex; 
    return data; 
} 

searchStartIndex = 0开始,然后继续调用它与前一个调用中的新的searchStartIndex = foundAtIndex进行循环。通过这种方式,您将从完整文件中获得所有仅感兴趣的GPS字符串。