在python中使用regex从多行字符串中获取值

2024-06-01 00:34:03 发布

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

我在这里看到过非常类似的帖子,但我似乎无法让它们中的任何一个发挥作用

这是我的密码

import re

regex='<item>
<obj1>grab1</obj1>
<obj2>text<obj2>
...
</item>'
pattern=re.compile(regex)
searchfile=open('data.dat')
filetext=searchfile.read()
text=re.findall(pattern,filetext)
print text

我试着把\n字符串放进去

regex='<item>\n
<obj1>grab1</obj1>\n
<obj2>grab2<obj2>\n
...
</item>'

但它不起作用。任何帮助都将不胜感激


Tags: textimportre密码item帖子regexpattern
2条回答

多行字符串使用三个单引号或双引号作为分隔符。不需要添加\n来表示新行

您的代码将变成:

import re

regex='''<item>
<obj1>grab1</obj1>
<obj2>text</obj2>
</item>'''
pattern=re.compile(regex)
searchfile=open('data.dat')
filetext=searchfile.read()
text=re.findall(pattern,filetext)
print text

也就是说,regex的第三行可能还有另一个错误:忘记关闭<obj2>元素

最后,如果您想解析XML文档,我不建议您使用正则表达式。相反,您可能希望查看诸如lxml之类的库

考虑以下文档data.dat

<document>
<item>
<obj1>grab1</obj1>
<obj2>text</obj2>
</item>
<otheritem></otheritem>
<item>
  <obj1>grab1</obj1>
  <obj2>text</obj2>
</item>
</document>

运行上述python代码,您将得到: ['<item>\n<obj1>grab1</obj1>\n<obj2>text</obj2>\n</item>']

由于缩进,第二个<item>被忽略

请尝试以下操作

import re

regex = '''<item>
<obj1>grab1</obj1>
<obj2>text<obj2>
...
</item>'''

pattern = re.compile(regex)

with open('data.dat') as searchfile:
    filetext = searchfile.read()
    text = pattern.findall(filetext)
    print text

相关问题 更多 >