Skip to main content
 首页 » 编程设计

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

2025年02月15日27unruledboy

我有这个字符串。

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 风格)

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 在这里是最优的)。