我有这种形式的文字:
<
{文本{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}}
<
答案 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]
您可以在text
和markers
之间获取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']