正则表达式在多行标签之间读取?

时间:2015-04-07 04:07:48

标签: python regex

我有这种形式的文字:
< {文本{1}}
一些文字efdg
一些文字abcd
> / {文本{1}}

我正在写一个正则表达式来提取:
一些文字efdg
一些文字abcd

由于它是多线的,我使用的是<文字> \ n +(^ +?)\ n + <文字>,但它不起作用。怎么办呢?

我尝试使用r'^。*?'但似乎没有奏效。

代码: 输入文件是:

< {DOC {1}}
       > {ID1 {1}} {123 {1}} / {ID1 {1}}     
   < {文本{1}}
        ABC
        高清
       > / {文本{1}}
       < / {DOC {1}}
       > {DOC {1}}        < {ID1 {1}} {1234 {1}} / {ID1 {1}}
       > {文本{1}}
        abcdd
        defdd
      < / {文本{1}}
       > / {DOC {1}}

<

2 个答案:

答案 0 :(得分:1)

x="""<text>
some text efdg
some text abcd
</text> """

print [i for i in re.findall(r"<text>([\s\S]*?)<\/text>",x)[0].split("\n") if i]

您可以在textmarkers之间获取split以获得结果。

答案 1 :(得分:0)

您可以通过BeautifulSoup解析器实现此目的。

>>> from bs4 import BeautifulSoup
>>> s = '''<doc>
<id1>123</id1>
<text>
abc
def
</text>
</doc>
<doc> <id1>1234</id1>
<text>
abcdd
defdd
</text>
</doc> '''
>>> soup = BeautifulSoup(s)
>>> [i.text.strip() for i in soup.findAll('text')]
['abc\ndef', 'abcdd\ndefdd']