2011-04-21 29 views
5

我有以下字符串:C#歇字符串分为多个部分

+53.581N -113.587W 4.0 Km W of Edmonton, AB 

在C#反正是有出打破这个字符串变成龙。 LATT。然后城市国家和中间部分?

所以基本上我想3个字符串:

Long 
Latt 
Location. 

这可能与该字符串的多种形式?他们在同一个合作伙伴,但显然数据会有所不同。

感谢

+0

使用正则表达式可能是你最好最好的。但为了制定一个具体的模式,一些输入字符串的例子会有所帮助。 – 2011-04-21 16:51:26

回答

4

使用正则表达式来实现这一点 - 是这样的:

string input = @"+53.581N -113.587W 4.0 Km W of Edmonton, AB"; 
Match match = Regex.Match(input, @"^(?<latitude>[+\-]\d+\.\d+[NS])\s+(?<longitude>[+\-]\d+\.\d+[EW])\s+\d+\.\d+\s+Km\s+[NSEW]\s+of\s+(?<city>.*?),\s*(?<state>.*)$"); 
if (match.Success) { 
    string lattitude = match.Groups["lattitude"].value; 
    string longitude = match.Groups["longitude"].value; 
    string city = match.Groups["city"].value; 
    string state = match.Groups["state"].Value; 
} 
1

您可以使用正则表达式来捕捉那些部分。请参阅http://www.c-sharpcorner.com/uploadfile/prasad_1/regexppsd12062005021717am/regexppsd.aspx

应该工作模式是以下(考虑到你所提供的一个例子):

^([+-]\d+\.\d+\w) ([+-]\d+\.\d+\w) (.*?)$ 
+0

+1我会完全去这个正则表达式。我敢打赌,你可以找到一些模式使用 – mhenrixon 2011-04-21 16:53:17

+0

你可以使用正则表达式和任何东西找到模式。这并没有增加任何新东西。 – manojlds 2011-04-21 16:54:06

+0

根据原始问题,此RegEx不会分隔城市,州和放弃“中间部分”。 – 2011-04-21 17:04:49

1

使用string.Split(的char [],Int32)已重载

var input = "+53.581N -113.587W 4.0 Km W of Edmonton, AB"; 
var splitArray = input.Split(new char[]{' '},3); 

你会获得长,经纬度和位置。 (注3 - 这一拆分阵列三次)

应对其他答案提示正则表达式:

请避免正则表达式如果格式将是相同的。上面的选项更简单得多,正则表达式很快就会变得难以理解。

+0

我认为正则表达式和这个解决方案非常好。我倾向于避免使用正则表达式,因为它可能很快变得无法理解。对于一个非常简单的解决方案,我认为String.Split工作得很好。对于更复杂的任务,我倾向于倾向于正则表达式。 – Justin 2011-04-21 18:55:37

+0

@Justin - 绝对。但请按照KISS。在这个问题的背景下,一个复杂的正则表达式应该很简单。 – manojlds 2011-04-21 19:26:56

2

就像在所有语言中一样,这是可能的哦,所以真棒正则表达式的力量。

如果你不熟悉正则表达式,我建议你学习它们。他们真棒。认真。

这里有一个教程开始使用.NET的正则表达式:

http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx