我使用python中的LXML库进行XML解析。在
在一个XML文件中,我有一些不好的字符,导致python中出现以下错误:
lxml.etree.XMLSyntaxError: CharRef
在python中打开和获取XML文件的内容之前,我必须从两个标记中删除坏字符:
1:<essid cloaked="true">....</essid>
或<essid cloaked="false">....</essid>
。在
2:<client-manuf>....</client-manuf>
XML文件的大小很大。所以我想用sed或者awk或者类似的工具来做。在
<crypt>0</crypt>
<total>20 50</total>
<fragments>0</fragments>
<retries>0</retries>
</packets>
<datasize>0</datasize>
<wireless-client number="1" type="established" first-time="Thu Feb 15 16:45:43 2018" last-time="Thu Feb 15 16:45:43 2018">
<client-mac>08:EA:40:D0:55:43</client-mac>
<client-manuf>SHENZHEN BILIAN ELECTRONIC CO.&#x ef;&#x bc;&#x 8c;LTD</client-manuf>
<essid cloaked="true">&#x 0;&#x 0;&#x 0;&#x 0;&#x 0;</essid>
<channel>8</channel>
<maxseenrate>1.000000</maxseenrate>
<carrier>IEEE 802.11b+</carrier>
<encoding>CCK</encoding>
<packets>
<LLC>0</LLC>
<data>0</data>
<crypt>0</crypt>
我想删除这些标签上的坏字符(客户manuf和essid)。在
发件人:<client-manuf>SHENZHEN BILIAN ELECTRONIC CO.&#x ef;&#x bc;&#x 8c;LTD</client-manuf>
收件人(或此):<client-manuf>SHENZHEN BILIAN ELECTRONIC CO. LTD</client-manuf>
收件人(或此):<client-manuf>SHENZHEN BILIAN ELECTRONIC CO</client-manuf>
发件人:<essid cloaked="true">&#x 0;&#x 0;&#x 0;&#x 0;&#x 0;</essid>
发件人:<essid cloaked="false">&#x 0;&#x WiFi 0;&#x MTN 0;&#x 0;&#x 0;</essid>
收件人(或此):<essid cloaked="true"></essid>
收件人(或此):<essid cloaked="true">N/A SSID</essid>
收件人(或此):<essid cloaked="false">WiFi MTN</essid>
这是我的解决方案。但这并不符合我的需要:
sed -e '/<essid cloaked="\(true\|false"\)>*.*<\/essid>/ s/\(&#x\|0;\)//g' a.txt
你的sed命令看起来没那么糟糕,只是留下了很多空白。在
由于sed通常是贪婪的,所以可以用“*”指定任意数量的空间。在
另一方面,如果有一些有效的文本,您可能不想将其粘在一起,因此可以为每个删除的模式添加一个空格:
^{pr2}$最后,您可以将多个空间压缩为一个:
注意,构造{foo;bar}将这两个命令绑定到一个命令块,只在before-grabbed模式上操作。否则会影响整个文件。
加上另一对屏蔽括号和一个屏蔽的加号:
你可以用一件事来代替一个模式的重复出现。在
内部模式是另一种选择&;x或0;。 外部图案是内部图案,可以选择用类似于
等等。在
你想要内部模式,我们称之为X,重复一次或多次,因此是+。但是如果没有parens,+只处理最后一个字符,而不是整个模式。在
你必须学习这种regex语言。找一个教程。你不能要求你生活中需要的每一种可能的变化。在
拥有良好的、基本的理解会很快得到回报。你不需要通过炉灶知道一切,但基本的东西和应该有一个好的估计,什么是可能的和什么不可能。那么回购,就是为了找东西,很少用。然后你可能只问那些难的/复杂的东西。在
使用
etree.XMLParser
对象的正确方法(lxml.etree
仅限):产生的
^{pr2}$output.xml
的关键片段:相关问题 更多 >
编程相关推荐