python - 正则表达式仅匹配从左到右阅读的最后一次出现

标签 python regex python-3.x

我有这个字符串。

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 20167 septembre 2016

如果我删除最后一个日期,则会捕获第一个日期。

(Python 风格)

Regex101 link

最佳答案

由于无法使用 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/

相关文章:

python - 将文件映射到内存

python - Snakemake如何忽略RuntimeWarning?

c++ - 在C++工作之后如何在Python中思考?

python - 在 Python 中通过正则表达式解析 GPS 接收器输出

python - 检测并选择文件夹中的非黑色图像

python - 字典解包过程中内部发生了什么?

Python 打印带有嵌套在字典中的列表的格式化文本

java - 仅从 For 循环 block 中删除 System.out 语句

regex - Grep 正则表达式 : List all lines except

python - 使 sklearn 中的网格搜索功能忽略空模型