如何在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()
的问题是 .*
是贪婪的,它会从第一个 "
开始直到最后一个 "
。因此,通过将 ?
放在它前面使其成为非贪婪的。使其成为惰性匹配。
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()
的问题是 .*
是贪婪的,它会从第一个 "
开始直到最后一个 "
。因此,通过将 ?
放在它前面使其成为非贪婪的。使其成为惰性匹配。