Python 正则表达式 - 不贪婪的量词问题
Python regex - Ungreedy quantifier question
我搞砸了一个较早的问题并将其删除(提供了一个导致错误解决方案的糟糕示例)。 我认罪
又来了,说得更准确了。 我还需要涵盖 2 不是字符串第一个字符的情况。
我有这个字符串:
bobsmith2kgminus10meshcompt3kgfredrogers
我只想 return 2
。
这是我的正则表达式:
.*(\d+?)kg.*
正在 returning 3
,但我没有看到我错过了什么。
我的python代码:
import re
val = 'bobsmith2kgminus10meshcompt3kgfredrogers'
out = re.sub(r'.*(\d+?)kg.*', r'', val)
print(out) #prints: 3
我也试过:
(.*)(\d+?)kg.*
(\d+?)kg.*
如果你真的想使用 re.sub
然后使用:
.*?(\d+)kg.*
这将 0 个或更多字符 尽可能少,根据需要扩展 在匹配和分组之前 \d+
。
代码:
>>> import re
>>> val = 'bobsmith2kgminus10meshcompt3kgfredrogers'
>>> print ( re.sub(r'.*?(\d+)kg.*', r'', val) )
2
否则,您可以在 re.search
中使用这个更简单的正则表达式:
(\d+)kg
代码:
>>> print ( re.search(r'(\d+)kg', val).group(1) )
2
我的猜测是这个表达式可能会起作用:
(\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))
我搞砸了一个较早的问题并将其删除(提供了一个导致错误解决方案的糟糕示例)。 我认罪
又来了,说得更准确了。 我还需要涵盖 2 不是字符串第一个字符的情况。
我有这个字符串:
bobsmith2kgminus10meshcompt3kgfredrogers
我只想 return 2
。
这是我的正则表达式:
.*(\d+?)kg.*
正在 returning 3
,但我没有看到我错过了什么。
我的python代码:
import re
val = 'bobsmith2kgminus10meshcompt3kgfredrogers'
out = re.sub(r'.*(\d+?)kg.*', r'', val)
print(out) #prints: 3
我也试过:
(.*)(\d+?)kg.*
(\d+?)kg.*
如果你真的想使用 re.sub
然后使用:
.*?(\d+)kg.*
这将 0 个或更多字符 尽可能少,根据需要扩展 在匹配和分组之前 \d+
。
代码:
>>> import re
>>> val = 'bobsmith2kgminus10meshcompt3kgfredrogers'
>>> print ( re.sub(r'.*?(\d+)kg.*', r'', val) )
2
否则,您可以在 re.search
中使用这个更简单的正则表达式:
(\d+)kg
代码:
>>> print ( re.search(r'(\d+)kg', val).group(1) )
2
我的猜测是这个表达式可能会起作用:
(\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))