【问题标题】:Regex Help Wanted With Capture Groups捕获组需要正则表达式帮助
【发布时间】:2009-10-14 13:50:16
【问题描述】:

我正在尝试从字符串中提取一些单词。这两种情况如下所示:

Case 1: "Group X - Ford Mondeo or similar"
Case 2: "Group X - Ford Mondeo"

我想要一个 .NET 正则表达式,在这两种情况下都能捕获“Ford Mondeo”。 到目前为止我最好的是:

^Group [A-Z] - (?<VehicleModel>.+)(?: or similar)$

返回: 案例一:“福特蒙迪欧” 案例二:“” 我试过这个:

^Group [A-Z] - (?<VehicleModel>.+)(?: or similar)?$

返回:

Case 1: ""
Case 2: "Ford Mondeo"

我试图说“或类似”出现零次或一次。 我可能需要一个表示“如果以“或类似”结尾的表达式,请执行此操作,否则执行此操作。 我已经使用 Expresso 很长一段时间了,只是无法确定我需要什么。 你能帮忙吗?

【问题讨论】:

  • 什么?:在第二个捕获组开始时做什么?
  • 它使它不是一个捕获组。它允许 ?在它之后应用于其中的所有内容,但它不会存储为捕获组。

标签: .net regex


【解决方案1】:

问题是 VehicleGroup 中的.+ 捕获太多。附加一个问号使其成为non-greedy:.+?

【讨论】:

    【解决方案2】:

    取决于您是否要接受任何空白字符:

    /^Group\s[A-Z]\s-\s(?<VehicleModel>.+?)(?:\sor\ssimilar)?$/
    

    将捕获带有空格字符的文本,包括制表符和

    /^Group [A-Z] - (?<VehicleModel>.+?)(?: or similar)?$/
    

    仅当文本使用空格时才会捕获。就像其他人说的那样,关键在于.+?,这使得捕获组不贪婪。没有它,第一组将吞下或类似的东西。

    【讨论】:

      【解决方案3】:
      ^Group [A-Z] - (?<VehicleModel>.+?)(?:or similar)?$
      

      【讨论】:

        【解决方案4】:

        试试这个:

        ^Group [A-Z] - (?<VehicleModel>.+?)(?: or similar)?$
        

        【讨论】:

          【解决方案5】:

          去掉点加号:

          ^Group [A-Z] - (?<VehicleModel>)(?: or similar)?$
          

          或者试试这个:

          ^Group [A-Z] - (?<VehicleModel>.+?)(?: or similar)?$
          

          我不熟悉这种 .net ?&lt;xyz&gt; 语法,也许它需要点加号?在这种情况下,.+? 使其不贪婪,因此.+ 不会吃掉 " 或类似的"。

          【讨论】:

            猜你喜欢
            • 2012-11-30
            • 2023-03-19
            • 1970-01-01
            • 2019-11-14
            • 1970-01-01
            • 2021-08-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多