小编典典

RegEx在具有换行符的两个字符串之间获取字符串

python

我有以下测试(格式如下):

<td scope="row" align="left">
      My Class: TEST DATA<br>
      Test Section: <br>
      MY SECTION<br>
      MY SECTION 2<br>
    </td>

我正在尝试获取“测试部分:”和“我的部分”之后的文本

我用不同的RegEx模式进行了几次尝试,但结果一无所获。

如果我做:

(?<=Test)(.*?)(?=<br)

然后,我得到正确的答复:

' Section: '

但是,如果我这样做

(?<=Test)(.*?)(?=</td>)

我没有结果。结果应为“我的第二
部分

我也尝试过使用RegEx Multiline,但没有结果。

任何帮助,将不胜感激。

如果重要的话,我正在Python 2.7中进行编码。

如果不清楚,或者您需要更多信息,请告诉我。


阅读 156

收藏
2020-12-20

共1个答案

小编典典

使用re.Sre.DOTALL标志。或在正则表达式前加上(?s).匹配所有字符(包括换行符)。

没有标志,.不匹配换行符。

(?s)(?<=Test)(.*?)(?=</td>)

例:

>>> s = '''<td scope="row" align="left">
...       My Class: TEST DATA<br>
...       Test Section: <br>
...       MY SECTION<br>
...       MY SECTION 2<br>
...     </td>'''
>>>
>>> import re
>>> re.findall('(?<=Test)(.*?)(?=</td>)', s)  # without flags
[]
>>> re.findall('(?<=Test)(.*?)(?=</td>)', s, flags=re.S)
[' Section: <br>\n      MY SECTION<br>\n      MY SECTION 2<br>\n    ']
>>> re.findall('(?s)(?<=Test)(.*?)(?=</td>)', s)
[' Section: <br>\n      MY SECTION<br>\n      MY SECTION 2<br>\n    ']
2020-12-20