如何得到第一次出现?正则表达式python

2024-09-29 01:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个html标记:

x=""" <div>ad</div>  \n\n <div> correct value  </div>  <div> wrong value </div>   """

我想得到corret value

所以我搜索单词ad,然后搜索</div>,然后搜索任何一个直到另一个<div>,然后得到直到</div>的所有值

我使用这个代码:

^{pr2}$

我使用falgre.S是因为我想让点也匹配新行。我不知道两人之间有多少线。所以我用。*!在

我认为findall应该返回correct value,但是它返回wrong value。为什么?它搜索最后一个div而不是第一个?在


Tags: 代码标记divvaluehtml单词adwrong
3条回答

如果您想在2特殊字符串之间查找内容,请使用^{}

>>> re.findall(r'(?<=\<div\>)[\w ]+(?=\<\/div\>)',x)
['ad', ' correct value  ', ' wrong value ']
>>> re.findall(r'(?<=\<div\>)[\w ]+(?=\<\/div\>)',x)[1].strip()
'correct value'
ad</div>((?!<div>).)*<div>(((?!<\/div>).)*)</div>

你可以试试这个好吧。看到了吗演示。在

http://regex101.com/r/zY9xA3/3

因为你所拥有的是贪婪的

尝试懒惰:

re.findall(r'ad</div>.*?<div>(.*?)</div>',x,re.S)

在您的示例中,.*实际上是在最后匹配所有内容,然后它看到<div>,然后您的regex会重新跟踪并重新开始匹配,类似的是第二个场景

此处演示:

http://regex101.com/r/zY9xA3/1

相关问题 更多 >