如何在python中表达这种非贪婪的正则表达式?

how to express this kind of non greedy regular expression in python?

s1='haha "h1" "hi"'
s2='haha "h1" "hi hi"'

我想从 s1 得到 "hi",从 s2 得到 "hi hi"。

>>> re.search('".*"$',s1).group()
'"h1" "hi"'
>>> re.search('".*"$',s2).group()
'"h1" "hi hi"'
>>> re.search('"*?.*"$',s1).group()
'haha "h1" "hi"'
>>> re.search('"*?.*"$',s2).group()
'haha "h1" "hi hi"'

只捕获 ":

之间不属于 " 的所有内容
>>> re.search('"[^"]*"$',s1).group()
'"hi"'
>>> re.search('"[^"]*"$',s2).group()
'"hi hi"'
".*?"$

试试这个:

https://regex101.com/r/fA6wE2/22

您可以使用re.findall(r'".*?"$',test_str)

你的正则表达式 re.search('".*"$',s1).group() 的问题是 .* 是贪婪的,它会从第一个 " 开始直到最后一个 "。因此,通过将 ? 放在它前面使其成为非贪婪的。使其成为惰性匹配。