我有这个字符串。
Votre vol : Casablanca - Paris Mercredi 31 aût 2016 AF1197 - Ecoi 7 septembre 2016 AF1196 - Economy 15:20 Paris,Charles de Gaulle (CDG),法国 - Terminal 2E Heure Limite d'Enregister un supplément。
使用以下正则表达式
(?:Votre vol|您的航类)(.*?([0-9]{1,2}\s[^\s]+?\s[0-9]{4}) )+
我想在不同的组中捕捉 31 août 2016
和 7 septembre 2016
。
如果我删除最后一个日期,则会捕获第一个日期。
(Python 风格)
最佳答案
由于无法使用 re
将所有捕获的子字符串保留在一个组中,因此您只能遵循以下两步过程:
- 使用您当前的正则表达式提取子字符串
- 然后,使用像
re.findall(r'\b[0-9]{1,2}\s+\S+\s+[0-9]{4}\b' 这样的子模式提取日期, s)
(参见 regex demo)。
使用 PyPi regex
模块,您可以使用 1-pass 方法获得所有必要的结果,因为该库存储每组的所有捕获。
关于正则表达式的小提示:[^\s]+?\s
可以写成 \S+\s
因为 [^\s]
匹配除空格以外的任何字符,而 +?
惰性量词将使匹配比使用贪婪的 +
(\s
是相反的简写字符类,所以 \S+\s
在这里是最优的)。
关于python - 正则表达式仅匹配从左到右阅读的最后一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42720620/