正则表达式帮助想要捕获组

时间:2009-10-14 13:50:17

标签: .net regex

我试图从字符串中提取一些单词。这两个案例看起来像这样:

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

我希望在这两种情况下都能捕获“福特蒙迪欧”的单一.NET正则表达式。 我到目前为止最好的是:

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

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

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

返回:

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

我试图说零或一次出现“或类似”。 我可能需要一个表达“如果结束”或类似的表达“这样做。 我现在一直在使用Expresso很长一段时间,只是不能把手指放在我需要的东西上。 你能帮忙吗?

5 个答案:

答案 0 :(得分:2)

问题是VehicleGroup中的.+捕获太多。添加问号以使其non-greedy.+?

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

将使用包含制表符和

在内的空格字符捕获文本
/^Group [A-Z] - (?<VehicleModel>.+?)(?: or similar)?$/

仅在文本使用空格时捕获。像其他人一样,密钥在.+?中,这使得捕获组不贪婪。没有它,第一组将吞下或类似的。

答案 4 :(得分:0)

删除点加号:

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

或者试试这个:

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

我不熟悉这种.net ?<xyz>语法,也许它需要点加号?在这种情况下,.+?会使其变得非贪婪,因此.+不会吃掉“或类似”。