【问题标题】:Regex match with multiple occurrences正则表达式匹配多次出现
【发布时间】:2015-09-19 05:04:38
【问题描述】:

使用类似于示例的字符串

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

至少这是它的基本要点。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

      您可以使用String.Split,而不是使用正则表达式

      string line = "90001:21880004:los angeles";
      string cityName = line.Split(':')[2]; // Gives 'los angeles'
      

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

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

      【讨论】:

        【解决方案4】:

        没有Regex你也可以做到这一点:

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

        【讨论】:

          【解决方案5】:

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

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

          通过不在数字周围添加括号,它们不会被正则表达式捕获。

          【讨论】:

            【解决方案6】:

            又一个正则表达式

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

            【讨论】:

              猜你喜欢
              • 2012-02-24
              • 1970-01-01
              • 1970-01-01
              • 2015-04-10
              • 2016-03-18
              • 1970-01-01
              • 2019-07-19
              • 2018-06-28
              相关资源
              最近更新 更多