Regex只匹配最后一次出现的读取

2024-09-30 12:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这根绳子。你知道吗

Votre vol : Casablanca - Paris Mercredi 31 août 2016 AF1197 - Ecoi 7 septembre 2016 AF1196 - Economy 15:20 Paris , Charles de Gaulle (CDG) , FRANCE - Terminal 2E Heure Limite d'Enregister un supplément.

使用以下正则表达式

(?:Votre vol|Your flight)(.*?([0-9]{1,2}\s[^\s]+?\s[0-9]{4}))+

我想在不同的组中捕获31 août 20167 septembre 2016。你知道吗

如果我删除最后一个日期,第一个日期就会被捕获。你知道吗

(Python味)

Regex101 link


Tags: deparischarles绳子volaoeconomyseptembre
1条回答
网友
1楼 · 发布于 2024-09-30 12:25:50

由于无法使用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在这里是最佳的)。你知道吗

相关问题 更多 >

    热门问题