C#将字符串分成多个部分

5

我有以下字符串:

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

在C#中,有没有办法将这个字符串分解成经度、纬度和城市州,并丢弃中间部分?
所以基本上我想要3个字符串:
Long
Latt
Location.

这种情况下,多种形式的该字符串是否可行?它们具有相同的格式,但数据显然是不同的。

谢谢


使用正则表达式可能是您的最佳选择。但是,为了制定一个具体的模式,更多输入字符串的示例将会很有帮助。 - Taylor Gerring
4个回答

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;
}

2

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”-这将把数组分成三部分)
对于其他建议使用正则表达式的答案,请不要使用正则表达式,如果格式相同。上述选项更简单,而且正则表达式很快就会变得难以理解。

我认为正则表达式和这个解决方案都非常好。我倾向于避免使用正则表达式,因为它很快就会变得难以理解。对于非常简单的解决方案,我认为String.Split非常有效。对于更复杂的任务,我倾向于使用正则表达式。 - Justin
@Justin - 当然。但要遵循KISS原则。在问题的背景下,复杂的正则表达式应该变得简单。 - manojlds

1

+1 我完全会用正则表达式来解决这个问题。我敢打赌你可以找到一些可以使用的模式。 - mhenrixon
你可以使用正则表达式来查找任何模式。这并没有增加任何新的东西。 - manojlds
根据原问题,该正则表达式无法分离城市、州和丢弃“中间部分”。 - Taylor Gerring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接