我在这里看过非常相似的帖子,但我似乎无法让他们中的任何一个工作。
这是我的代码
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>'
但它不起作用。任何帮助将不胜感激。
答案 0 :(得分:0)
尝试以下
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
答案 1 :(得分:0)
多行字符串使用三个单引号或双引号作为分隔符。无需添加\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
也就是说,你的正则表达式的第三行可能还有另一个错误:你忘了关闭<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>
被忽略了。