gpt4 book ai didi

python - 不了解惰性正则表达式

转载 作者:行者123 更新时间:2023-11-28 21:53:00 26 4
gpt4 key购买 nike

假设我们有一个字符串 1abcd1efg1hjk1lmn1 并且想要在 1 之间找到东西。我们所做的是

re.findall('1.*?1','1abcd1efg1hjk1lmn1')

得到两个结果

['1abcd1', '1hjk1']

好的,我明白了。但是如果我们这样做

re.findall('1.*?1hj','1abcd1efg1hjk1lmn1')

为什么它在 1 之间获取两个间隔而不是一个?为什么我们得到的是 ['1abcd1efg1hj'] 而不是 ['1efg1hj']?这不是懒惰应该做的吗?

最佳答案

正则表达式总是尝试从左到右匹配输入字符串。考虑您的 '1.*?1hj' 正则表达式。正则表达式中的 1 匹配第一个,随后的 .*? 非贪婪地匹配 1hj 子字符串之前的所有字符。这样你就得到了 ['1abcd1efg1hj'] 而不是 ['1efg1hj']

要将 ['1efg1hj'] 作为输出,您需要使用一个否定类作为 1[^1]*1hj

>>> s = "1abcd1efg1hjk1lmn1"
>>> re.findall(r'1.*?1hj', s)
['1abcd1efg1hj']
>>> re.findall(r'1[^1]*1hj', s)
['1efg1hj']

关于python - 不了解惰性正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27343968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com