あなたはその後、コメント<!-- xxx -->
に変換し、少なくとも]]>
年代の全体
誤ったセットを取得することにより、ダメージを焼灼に試すことができます。
このようにして、停止しなくなり、残りのレコードを取得できるようになります。
私は本当にこの単純な正規表現は本当に(笑)準備ができてXML解析
ではありませんどのように説明したいが、それは言って十分ではありません、これはただの修理と
サルベージ操作です。
一部ノート - 全体アサーション及びグループ1は(Pythonのre
がサポートしていない)
擬似原子団として使用されています。
正規表現
(?=(<!\[CDATA\[[\S\s]*?\]\]>))\1((?:(?:(?!<!\[CDATA\[[\S\s]*?\]\]>)[\S\s])*\]\]>)+)
書式
(?=
(<!\[CDATA\[ [\S\s]*? \]\]>) # (1)
)
\1
( # (2 start)
(?:
(?:
(?! <!\[CDATA\[ [\S\s]*? \]\]>)
[\S\s]
)*
\]\]>
)+
) # (2 end)
Pythonサンプル
import re
def callback(match):
# Here you can further parse and/or do subs on 'group(2)'
# the errant set of `]]>aa]]>]]>', etc.
# For this we just cauterize it by enclosing in a comment block.
return match.group(1) + '<!-- ' + match.group(2) + '-->'
xml = ' <article><Date>2011-04-22T10:09:18Z</Date><Heading><![CDATA[data - content ]]></Heading><Body><![CDATA[contene - data Normal data. ]]></Body></article> <article><Date>2011-02-26T12:48:09Z</Date><Heading><![CDATA[Content]]></Heading><Body><![CDATA[ Content-abc Help ]]> {# #} Content data - MORE style="position: relative; left: -35%;" /> ]]> More 0) { %> 0) { %> 0) { %> ]]>]]></Body></article><article><Date>2011-04-22T10:09:18Z</Date><Heading><![CDATA[data - content ]]></Heading><Body><![CDATA[contene - data Normal data. ]]></Body></article>'
xml = '<root>' + xml + '</root>'
xmlnew = re.sub(r'(?=(<!\[CDATA\[[\S\s]*?\]\]>))\1((?:(?:(?!<!\[CDATA\[[\S\s]*?\]\]>)[\S\s])*\]\]>)+)', callback, xml)
print(xmlnew)
http://rextester.com/YACZ64236
Oputputがブラウザで表示
<?xml version="1.0"?>
-<root>
-<article>
<Date>2011-04-22T10:09:18Z</Date>
-<Heading>
<![CDATA[data - content ]]>
</Heading>
-<Body>
<![CDATA[contene - data Normal data. ]]>
</Body>
</article>
-<article>
<Date>2011-02-26T12:48:09Z</Date>
-<Heading>
<![CDATA[Content]]>
</Heading>
-<Body>
<![CDATA[ Content-abc Help ]]>
<!-- {# #} Content data - MORE style="position: relative; left: -35%;" /> ]]> More 0) { %> 0) { %> 0) { %> ]]>]]>-->
</Body>
</article>
-<article>
<Date>2011-04-22T10:09:18Z</Date>
-<Heading>
<![CDATA[data - content ]]>
</Heading>
-<Body>
<![CDATA[contene - data Normal data. ]]>
</Body>
</article>
</root>
出典
2017-07-13 23:39:19
sln
**マルチレベル/階層構造の解析/修正に正規表現を使用しないでください。 – zwer
[XMLを解析するために単純な正規表現を使用しない](https://stackoverflow.com/a/1732454/918959)(単一のCDATAフラグメントでは機能するかもしれないが) –
これは、XMLプロセッサが解析する方法とまったく同じですcdata '<!\\ CDATA \ [[\ S \ s] *?\] \]>'あなたが意味することを言います。 – sln