正则表达式如果有多个空格,如何停止捕获

时间:2017-03-17 15:52:30

标签: regex

所以我想从这种表中捕获名称和代码:

|   2 | Aix en Provence (Gare SNCF)                        | QXB  |
|   3 | Ajaccio                                            | AJA  |
|   4 | Angers                                             | ANE  |
|   5 | Angers (Gare SNCF)                                 | QXG  |

使用\|\s+\d+\s\|\s([^|]+)\|\s(\w+)\s+\|,我可以提取整行,直到|

但是我想trim第一个捕获组。

所以我的问题是,如果单词之间有多个空格,我怎么能说正则表达式停止捕获?

Here you have a playground.

1 个答案:

答案 0 :(得分:1)

您可以将+字符类之后的贪婪[^|]变为惰性字符,并在其后添加\s*(零个或多个空格)模式。

使用

\|\s+\d+\s*\|\s*([^|]+?)\s*\|\s*(\w+)\s+\|
                ^^^^^^^^^^^ 

请参阅regex demo

由于懒惰量化的子模式仅在所有后续子模式未能找到匹配后进行测试,因此以前捕获到组1中的空白现在以\s*模式使用,而组1除去它们。