我弄乱了之前的一个问题并将其删除(提供了一个导致错误解决方案的糟糕示例)。 认罪
这又是,表述得更正确。 我还需要涵盖 2 不是字符串的第一个字符的情况。
我有这个字符串:
bobsmith2kgminus10meshcompt3kgfredrogers
我只想返回 2
。
这是我的正则表达式:
.*(\d+?)kg.*
它返回 3
,但我没有看到我错过了什么。
我的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
<小时/>
否则,您可以在 re.search
中使用这个更简单的正则表达式:
(\d+)kg
代码:
>>> print ( re.search(r'(\d+)kg', val).group(1) )
2
关于Python 正则表达式 - 不贪婪量词问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331358/