如何解决正则表达式提取GPS坐标C#
| 我有一个要提取GPS坐标的HTML文件,我正在尝试通过创建regEx来做到这一点,但到目前为止还算不上什么。 我正在使用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
解决方法
这是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
这样的整数,但是我以为以防万一。
, 这是一项基本比赛,只需稍作尝试即可获得更好的结果:
[SN]\\s\\d+\\s\\d+\\.\\d+\\s[EW]\\s\\d+\\s\\d+\\.\\d+
, 首先,我将研究“可能性”。我会写
[SN]\\s-?\\d{1,3]\\s\\d+\\.\\d+\\s[EW]\\s-?\\d{1,3]\\s\\d+\\.\\d+
这只是个好运!
, 如果您的数据模式恒定,则表示跨度样式部分(< span style=\"font-style: italic;\" >
)
为什么不简单尝试GetStringBetween
italic;\">(
和,
以下是我编写的使用方法:
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字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。