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

2024-09-19 23:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的文本:
<文本>
一些文本efdg
一些文本zi dong
</文本>

我正在编写一个正则表达式来提取:
一些文本efdg
一些文本zi dong

因为它是多行的,所以我使用<文本>\n+(^+?)\n+<文本>,但是它不工作。如何做到这一点?在

我试过用r'^.*但似乎没用。在

代码: 输入文件是:

<文档>
<id1>123</id1>
<文本>
abc公司
定义
</text>
</doc>
<文档><id1>1234</id1>
^{cd2> ABCD
定义
</text>
</doc>

for line in f.read().split('</doc>\n'):

    tag = re.findall(r'<id1>\s*(.+)\s*</id1>',line)  
    print tag[0]
    texttag = re.findall(r'<text>\s*(.+)\s*</text>',line,re.MULTILINE)
    print texttag 

Tags: text文档文本redoc定义tagline
2条回答

您可以通过beauthulsoup解析器实现这一点。在

>>> 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']
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]

您可以在markers之间获取text,然后split来获得结果。在

相关问题 更多 >