Python 正则表达式 - 不贪婪量词问题

标签 python regex regex-greedy

我弄乱了之前的一个问题并将其删除(提供了一个导致错误解决方案的糟糕示例)。 认罪

这又是,表述得更正确。 我还需要涵盖 2 不是字符串的第一个字符的情况。

我有这个字符串:

bobsmith2kgminus10meshcompt3kgfredrogers

我只想返回 2

这是我的正则表达式:

.*(\d+?)kg.*

它返回 3,但我没有看到我错过了什么。

RegEx101.com Demo

我的Python代码:

import re
val = 'bobsmith2kgminus10meshcompt3kgfredrogers'
out = re.sub(r'.*(\d+?)kg.*', r'\1', val)
print(out) #prints: 3

我也尝试过:

(.*)(\d+?)kg.*
(\d+?)kg.*

最佳答案

如果您确实想使用re.sub,请使用:

.*?(\d+)kg.*

这将在匹配和分组 \d+ 之前尽可能少地出现 0 个或多个字符,并根据需要进行扩展

代码:

>>> import re
>>> val = 'bobsmith2kgminus10meshcompt3kgfredrogers'
>>> print ( re.sub(r'.*?(\d+)kg.*', r'\1', val) )
2

RegEx Demo

<小时/>

否则,您可以在 re.search 中使用这个更简单的正则表达式:

(\d+)kg

代码:

>>> print ( re.search(r'(\d+)kg', val).group(1) )
2

关于Python 正则表达式 - 不贪婪量词问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331358/

相关文章:

javascript - 从字符串 : 'matrix(1, 0, 0, 1, 3, 5)' 中获取最后 2 个数字

regex - 匹配/之后的最后一个词

python - 用正则表达式抓取带有可选 <spans> 的 <p>

javascript - 如何使用正则表达式替换所有出现的字符,除非该字符包含在单词中

python - 即使我给它向前看和向后看的要求,正则表达式是否总是贪婪的?

python - 如何最有效地检查列表中的唯一元素?

python - 我收到错误 400 : Bad Request on custom Heroku domain, 但在 foo.herokuapp.com 上工作正常

python - 数据流/apache 光束 : manage custom module dependencies

python - 正则表达式,用于匹配单词后跟斜杠和10位数字

python - 既没有提供 DSN 也没有提供 SERVER 关键字