正则表达式匹配多次出现

Regex match with multiple occurrences

例如字符串看起来像

90001:21880004:los angeles
10001:21880005:new york

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

你可能会使用像这样的正则表达式:

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

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

至少这是它的基本要点。

您可以使用 String.Split

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

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

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

你可以在没有 Regex 的情况下实现这一点:

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

如果您知道正好有 2 个冒号,您可以这样做:

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

通过不在正则表达式无法捕获的数字周围添加括号。

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

^\d+:\d+:(.+)$ 应该可以。

([^\d:]+) 应该也可以。

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

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

另一个正则表达式

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