我想使用正则表达式匹配模式的最后一次出现.
我有这样的文字结构:
Pellentesque habitant morbi tristique senectus et netus et
lesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae
ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam
egestas <br>semper<br>tizi ouzou<br>Tizi Ouzou<br>
Run Code Online (Sandbox Code Playgroud)
我希望<br>
在我的情况下匹配两个之间的最后一个文本<br>Tizi Ouzou<br>
,理想情况下是Tizi Ouzou
字符串
请注意,最后一个后面有一些空格 <br>
我试过这个:
<br>.*<br>\s*$
Run Code Online (Sandbox Code Playgroud)
但它会选择从第一个<br>
到最后一个的所有内容.
注意:我正在使用python,我正在使用pythex来测试我的正则表达式
mol*_*are 15
对我来说最清楚的方法是:
>>> re.findall('<br>(.*?)<br>', text)[-1]
'Tizi Ouzou'
Run Code Online (Sandbox Code Playgroud)
Jon*_*nts 14
使用内置str
函数的非正则表达式方法:
text = """
Pellentesque habitant morbi tristique senectus et netus et
lesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae
ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam
egestas <br>semper<br>tizi ouzou<br>Tizi Ouzou<br> """
res = text.rsplit('<br>', 2)[-2]
#Tizi Ouzou
Run Code Online (Sandbox Code Playgroud)
看看相关的问题:你不应该用正则表达式解析HTML.请改用正则表达式解析器.对于Python,我听说美丽的汤是要走的路.
无论如何,如果你想用正则表达式做,你需要确保.*
不能超越另一个<br>
.要做到这一点,在使用每个角色之前,我们可以使用前瞻来确保它不会启动另一个角色<br>
:
<br>(?:(?!<br>).)*<br>\s*$
Run Code Online (Sandbox Code Playgroud)
您可以在贪婪量词中使用减少的字符类(假设您之间没有标记<br>
):
<br>([^<]*)<br>\s*$
Run Code Online (Sandbox Code Playgroud)
要么
<br>((?:[^<]+|<(?!br>))*)<br>\s*$
Run Code Online (Sandbox Code Playgroud)
允许内部标签.
由于您搜索的字符串Tizi Ouzou
没有,<br>
您可以提取第一个捕获组.