为了账号安全,请及时绑定邮箱和手机立即绑定

Python regex - 不贪婪的量词问题

Python regex - 不贪婪的量词问题

湖上湖 2022-04-23 21:28:33
我搞砸了一个较早的问题并将其删除(提供了一个导致错误解决方案的糟糕示例)。过失又来了,说得更正确。我还需要涵盖 2 不是字符串的第一个字符的情况。我有这个字符串:bobsmith2kgminus10meshcompt3kgfredrogers我希望只返回2.这是我的正则表达式:.*(\d+?)kg.*它正在返回3,我看不到我错过了什么。我的python代码:import reval = 'bobsmith2kgminus10meshcompt3kgfredrogers'out = re.sub(r'.*(\d+?)kg.*', r'\1', val)print(out) #prints: 3我也试过:(.*)(\d+?)kg.*(\d+?)kg.*
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

如果您真的想使用,请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


查看完整回答
反对 回复 2022-04-23
?
ibeautiful

TA贡献1993条经验 获得超5个赞

我的猜测是这个表达式可能很简单:


(\d+)kg.*

演示


测试

import re


regex = r"(\d+)kg.*"


test_str = """

2kgminus10meshcomp3kg

some_content_before200kgminus10meshcomp3kg

"""

print(re.findall(regex, test_str))

输出

['2', '200']

或与re.sub:


import re


regex = r".*?(\d+)kg.*"


test_str = """

2kgminus10meshcomp3kg

some_content_before200kgminus10meshcomp3kg

"""

subst = "\\1"

print(re.sub(regex, subst, test_str))


查看完整回答
反对 回复 2022-04-23
  • 2 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信