正则表达式匹配多个出现

时间:2015-07-01 20:55:26

标签: c# visual-studio-2013 regex-negation

使用类似于

的字符串
90001:21880004:los angeles
10001:21880005:new york

我想通过正则表达式在最后提取城市名称。我发现很难对这两个:很难有人指出我正确的方向吗?

6 个答案:

答案 0 :(得分:1)

你可以使用正则表达式,如:

(\d+:)+([A-Za-z\s]+)

您可以捕获编号组(\d+:)+的位置 然后文本([A-Za-z\s])将捕获大多数城市名称。

至少这是它的基本要点。

答案 1 :(得分:0)

您可以使用String.Split

而不是使用正则表达式
string line = "90001:21880004:los angeles";
string cityName = line.Split(':')[2]; // Gives 'los angeles'

这会将字符串分成三部分(因为你有两个: s)并取第三部分(记住数组是基于0的),其中包含你的城市名称。

请确保您的数据集中没有城市名称中包含:

答案 2 :(得分:0)

您可以在没有Regex的情况下实现此目的:

string la = "90001:21880004:los angeles".Split(':')[2];
string ny = "10001:21880005:new york".Split(':')[2];

答案 3 :(得分:0)

如果您知道确实有 2 冒号,您可以执行以下操作:

\d:\d:([a-zA-Z\s]+)

不要在他们赢得的数字周围添加括号而不会被正则表达式捕获。

答案 4 :(得分:0)

如果你真的想使用正则表达式:

^\d+:\d+:(.+)$应该有用。

([^\d:]+)也应该有用。

然而,它看起来真的只是你想做一个分裂。

"11111:111111:name".Split(':')[2]可能是您最快的方法。

答案 5 :(得分:0)

另一个正则表达式

string pattern = @"[^:]+";
var city = Regex.Match(text, pattern, RegexOptions.RightToLeft);