gpt4 book ai didi

Python 正则表达式 : Match 1 or 2 digits, 返回最长

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:30 24 4
gpt4 key购买 nike

我很难理解我的错误。考虑这些例子:

A 9 minutes delay experienced

a 10 minutes delay

我想分别提取9和10。

所以我尝试了这个:

.*(\d{1,2})(?:\s)?(min|m|hour|hr|h|minutes|minute) 

test link

但对于最后一种情况,组返回 0 而不是 10。我认为 \d{1,2} 是贪婪的,因此会返回最长的匹配。其他不成功的尝试:

.*(\d+)(?:\s)?(min|m|hour|hr|h|minutes|minute) 
.*([0-9]+)(?:\s)?(min|m|hour|hr|h|minutes|minute)

最佳答案

您在模式的开头使用了 .* ,它尽可能多地获取除换行符以外的任何 0+ 个字符,然后开始回溯,尝试为后续子模式容纳子字符串.这样,您将丢失除最后一位以外的所有数字。

您需要完全丢弃 .* 并使用 re.searchre.findallr'(\d {1,2})\s?(?:min|m|hour|hr?|minutes?)'(参见 regex demo here ):

import re
ss = ['A 9 minutes delay experienced','a 10 minutes delay']
for s in ss:
m = re.search(r'(\d{1,2})\s?(?:min|m|hour|hr?|minutes?)', s)
if m:
print(m.group(1))

参见 Python demo

此模式将在找到时匹配:

  • (\d{1,2}) - 第 1 组捕获 1 位或 2 位数字(使用 + 而不是 {1,2} 如果您期望更长的数字)
  • \s? - 1 或 0 个空格(也许 * 更可靠)
  • (?:min|m|hour|hr?|minutes?) - min, m, hour code>, h, hr等非捕获组,仅用于分组。

关于Python 正则表达式 : Match 1 or 2 digits, 返回最长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41274132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com