Python regex - 不贪婪的量词问题

我搞砸了一个较早的问题并将其删除(提供了一个导致错误解决方案的糟糕示例)。过失


又来了,说得更正确。我还需要涵盖 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.*


湖上湖
浏览 116回答 2
2回答

哈士奇WWW

如果您真的想使用,请re.sub使用:.*?(\d+)kg.*这将尽可能少地使用0 个或多个字符,在匹配和分组之前根据需要扩展\d+。代码:>>> 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

ibeautiful

我的猜测是这个表达式可能很简单:(\d+)kg.*演示测试import reregex = r"(\d+)kg.*"test_str = """2kgminus10meshcomp3kgsome_content_before200kgminus10meshcomp3kg"""print(re.findall(regex, test_str))输出['2', '200']或与re.sub:import reregex = r".*?(\d+)kg.*"test_str = """2kgminus10meshcomp3kgsome_content_before200kgminus10meshcomp3kg"""subst = "\\1"print(re.sub(regex, subst, test_str))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python