Python 如果第一个正则表达式没有匹配项,则匹配到第二个正则表达式

Python 如果第一个正则表达式没有匹配项,则匹配到第二个正则表达式,python,regex,Python,Regex,我试图在python中使用正则表达式来提取HTML标记之间的文本。问题是,有时字符串中没有HTML标记,因此我希望我的正则表达式与整个字符串匹配。到目前为止,我已经找到了与标记内部文本匹配的部分: (?<=>).*(?=<\/) 否则,我希望它返回字符串中的所有文本 我在网上读过一些关于正则表达式条件的文章,但我似乎无法让它们发挥作用。如果有人能给我指出正确的方向,那就太好了。提前感谢。这里有一个解决方法。我们不调整正则表达式,而是调整字符串: >>> s=

我试图在python中使用正则表达式来提取HTML标记之间的文本。问题是,有时字符串中没有HTML标记,因此我希望我的正则表达式与整个字符串匹配。到目前为止,我已经找到了与标记内部文本匹配的部分:

(?<=>).*(?=<\/)
否则,我希望它返回字符串中的所有文本


我在网上读过一些关于正则表达式条件的文章,但我似乎无法让它们发挥作用。如果有人能给我指出正确的方向,那就太好了。提前感谢。

这里有一个解决方法。我们不调整正则表达式,而是调整字符串:

>>> s='<a density="sparse" href="http://topics.bloomberg.com/russia/">Russia</a>'
>>> re.findall(r'(?<=>)[^<>]*(?=<\/)', s if '>' in s else '>%s</' % s)
['Russia']
>>> s='This is Russia Today'
>>> re.findall(r'(?<=>)[^<>]*(?=<\/)', s if '>' in s else '>%s</' % s)
['This is Russia Today']
>s=''

>>>re.findall(r'(?)[^]*(?='in s else'>%s%s您可以使用单个正则表达式来完成此操作。您不需要进行任何变通

>>> import re
>>> s='<a density="sparse" href="http://topics.bloomberg.com/russia/">Russia</a>'
>>> re.findall(r'(?<=>)[^<>]+(?=</)|^(?!.*?>.*?</).*', s, re.M)
['Russia']
>>> s='This is Russia Today'
>>> re.findall(r'(?<=>)[^<>]+(?=</)|^(?!.*?>.*?</).*', s, re.M)
['This is Russia Today']
>>重新导入
>>>s=“”

>>>关于findall(r'(?)[^]+(?=.*)随预期输出一起发布一个示例。使用一些html解析器。如果其他情况下,为什么不使用
而不是
呢?我正在尝试学习正则表达式,但如果做不到,我将使用该选项。html解析不是学习正则表达式的理想场所。+1,但我会使用
re.S
而不是
re.m
,因为OP需要整个str惯性导航与制导。
>>> s='<a density="sparse" href="http://topics.bloomberg.com/russia/">Russia</a>'
>>> re.findall(r'(?<=>)[^<>]*(?=<\/)', s if '>' in s else '>%s</' % s)
['Russia']
>>> s='This is Russia Today'
>>> re.findall(r'(?<=>)[^<>]*(?=<\/)', s if '>' in s else '>%s</' % s)
['This is Russia Today']
>>> import re
>>> s='<a density="sparse" href="http://topics.bloomberg.com/russia/">Russia</a>'
>>> re.findall(r'(?<=>)[^<>]+(?=</)|^(?!.*?>.*?</).*', s, re.M)
['Russia']
>>> s='This is Russia Today'
>>> re.findall(r'(?<=>)[^<>]+(?=</)|^(?!.*?>.*?</).*', s, re.M)
['This is Russia Today']