這裏是一個 '有點' 好片斷顯示:
- precompiled regexen
- LINQ匿名類型的投影
- 文化感知(正確)數字分析和打印
你會想提取某些代碼(例如數字解析)在現實生活中。
查看一下live on Ideone.com。
using System;
using System.Linq;
using System.Text.RegularExpressions;
using System.Globalization;
namespace SODemo
{
class MainClass
{
private static readonly CultureInfo CInfo = CultureInfo.CreateSpecificCulture("en-US");
public static void Main (string[] args)
{
string segment = "51.54398, -0.27585;51.55175, -0.29631;51.56233, -0.30369;51.57035, -0.30856;51.58157, -0.31672;51.59233, -0.3354";
var re = new Regex(@"\s*(?<lat>[-+]?[0-9.]+),\s*(?<lon>[-+]?[0-9.]+)\s*;", RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
var locations = re.Matches(segment).Cast<Match>().Select(m => new
{
Lat = decimal.Parse(m.Groups["lat"].Value, CInfo),
Long = decimal.Parse(m.Groups["lon"].Value, CInfo),
});
foreach (var l in locations)
Console.WriteLine(l);
}
}
}
輸出:
{ Lat = 51,54398, Long = -0,27585 }
{ Lat = 51,55175, Long = -0,29631 }
{ Lat = 51,56233, Long = -0,30369 }
{ Lat = 51,57035, Long = -0,30856 }
{ Lat = 51,58157, Long = -0,31672 }
有(幾乎?)從來沒有使用LINQ to分割字符串的好方法。也就是說,System.Text.RegularExpressions就是你想要的 – sehe 2012-04-09 21:52:33
什麼是你的字符串末尾的「-0.3354」,「London:484」? – 2012-04-09 21:54:29
@sehe:對這樣一個簡單的任務使用正則表達式是矯枉過正的。你知道你輸入的格式是不變的,而且很容易通過分割來分析*應該*使用split而不是正則表達式。 – 2012-04-09 21:55:45