我试图从字符串中提取一些单词。这两个案例看起来像这样:
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很长一段时间,只是不能把手指放在我需要的东西上。 你能帮忙吗?
答案 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>
语法,也许它需要点加号?在这种情况下,.+?
会使其变得非贪婪,因此.+
不会吃掉“或类似”。