如何在正则表达式中捕获此纬度值?

时间:2011-11-01 21:10:49

标签: c# regex

我正在拨打一项服务,让我回到这样的纬度和经度:"Lat:42.747058 Long:-84.551892"

如何使用正则表达式捕获纬度值? 此代码不起作用。

string GPSLocation = "Lat:42.747058 Long:-84.551892";
MatchCollection matches = Regex.Matches(GPSLocation, "Lat:() ");
if (matches.Count > 0)
{
    string latValue = matches[0].Value;
    return Decimal.Parse(latValue);
}
return 0M;

8 个答案:

答案 0 :(得分:4)

试试这个正则表达式:

(?<=Lat:)(-?\d+\.\d+)

在C#中:

Regex.Matches(GPSLocation, "(?<=Lat:)(-?\\d+\\.\\d+)")[0].Value;

它只是将十进制数与可选的- - 符号匹配。

答案 1 :(得分:1)

我不会像这样简单地使用正则表达式

怎么样

string GPSLocation = "Lat:42.747058 Long:-84.551892";
var values = GPSLocation.split(" ");
if (values.Count > 0)
{
    string lat = values[0].split(":")[1];
    return Decimal.Parse(lat);
}
return 0M;

答案 2 :(得分:1)

希望你不介意我使用非正则表达式解决方案

    string GPSLocation = "Lat:42.747058 Long:-84.551892";
    string lat = GPSLocation.Substring(4, GPSLocation.IndexOf("Long") - 5);
    string lon = GPSLocation.Substring(GPSLocation.IndexOf("Long") + 5);

答案 3 :(得分:0)

"Lat:()"将匹配“Lat:”,然后捕获一个空字符串。在括号内,您需要添加要捕获的字符,如下所示:"Lat:([-.0-9]*)"

答案 4 :(得分:0)

这应该有效:

Lat:([\d.-]+) Long:([\d.-]+)

答案 5 :(得分:0)

尝试:

string GPSLocation = "Lat:42.747058 Long:-84.551892";
string latRegex = "Lat:-?([1-8]?[1-9]|[1-9]?0)\\.{1}\\d{1,6}"
MatchCollection matches = Regex.Matches(GPSLocation, latRegex);
if (matches.Count > 0)
{
    ...

正则表达式从RegexLib.com

无耻地被盗

确保加倍反斜杠

答案 6 :(得分:0)

使用此字符串:string GPSLocation = "Lat:42.747058 Long:-84.551892";您可以先使用拆分(':'),然后使用拆分(''):string s=GPSLocation.Split(':')[1].Split(' ')[0]然后使用s Lat。

答案 7 :(得分:0)

使用可以一次又一次编译和使用的正则表达式对象。

Decimal res;
string GPSLocation = "Lat:42.747058 Long:-84.551892";
Regex regexObj = new Regex(@"(?<=Lat:)-?(\b[0-9]+(?:\.[0-9]+)?\b)");
if (Decimal.TryParse(regexObj.Match(GPSLocation).Groups[1].Value, out res)){
     return res;
}
return 0M;