我有这样一句话:
<bpt i="1" type="1" x="1" />und ZF-Getriebe <ept i="1" />TipMatic <ph x="2" type="2" />Lite (</cf>6AS850, 6AS800, 6AS1000)
我想要一个正则表达式,它将提取xml部分,所以最后句子将是:
__xml__und ZF-Getriebe __xml__TipMatic __xml__Lite (</cf>6AS850, 6AS800, 6AS1000)
可能的正则表达式是什么?
答案 0 :(得分:1)
我认为没有任何好方法可以做到这一点 - afaik,正则表达式并不擅长提取XML。可能你最好的选择是使用BeautifulSoup:
from bs2 import BeautifulSoup as BS
xml ="""
<bpt i="1" type="1" x="1" />und ZF-Getriebe <ept i="1" />TipMatic <ph x="2" type="2" />Lite (</cf>6AS850, 6AS800, 6AS1000)
"""
a = BS(xml)
list(a.strings)
[u'und ZF-Getriebe ', u'TipMatic ', u'Lite (</cf>6AS850, 6AS800, 6AS1000)\n']
您也可以通过
来浏览列表 # It adds <html><body> in front of it, so this gets around that
cl = list(a.children.next().children.next().children)
cl
[<bpt i="1" type="1" x="1"></bpt>,
u'und ZF-Getriebe ',
<ept i="1"></ept>,
u'TipMatic ',
<ph type="2" x="2"></ph>,
u'Lite (</cf>6AS850, 6AS800, 6AS1000)\n']
您可以检查每个孩子的类型,看它是字符串还是XML。
答案 1 :(得分:1)
假设xml标记始终处于打开 - 关闭状态,这可能会执行您想要的操作。您可以将xml放入其中。
>>> line = '''<bpt i="1" type="1" x="1" />und ZF-Getriebe <ept i="1" />TipMatic <ph x="2" type="2" />Lite (</cf>6AS850, 6AS800, 6AS1000)'''
>>> import re
>>> pieces = []
>>> pos = 0
>>> for m in re.finditer(r'(<[^\/]+\/>)', line):
... line[m.span()[0]:m.span()[1]]
... pieces.append(line[pos:m.span()[0]])
... pos = m.span()[1]
...
'<bpt i="1" type="1" x="1" />'
'<ept i="1" />'
'<ph x="2" type="2" />'
>>> pieces.append(line[m.span()[1]:])
>>> pieces
['', 'und ZF-Getriebe ', 'TipMatic ', 'Lite (</cf>6AS850, 6AS800, 6AS1000)']