xml ファイルに正規表現を適用して、値を見つけて置換します。通常は動作します (「xml パーサーを使用してください」という声が聞こえましたが、その間は使用できません)。ただし、値に特殊文字が含まれていると、すべてが台無しになります。
以下のような xml ファイルがあるとします。
<fieldset>
<idle1>
<value>something\\n</value>
</idle1>
<idle2>
<value>blabla</value>
</idle2>
</fieldset>
<idle2><value>
" " ノードの値を置き換えようとすると、" " ノードの値<idle1><value>
が "something\n" になります。ファイルへの書き込みに関しては、xml は次のようになります。
<fieldset>
<idle1>
<value>something
</value>
</idle1>
<idle2>
<value>blabla</value>
</idle2>
</fieldset>
検索と置換の両方で、「r」文字列リテラルを使用します。しかし、うまくいかないようです。問題を解決します。検索と置換のたびに、「\n」を「」に置き換えて\\n
から、結果をファイルに書き込みます。しかし、それは効率的な使用方法ではありません。
見えなかったものはありますか?\\n
ファイルに" " を書き込みたいだけです。これは私がそれを欲しがるほどですか?
編集:これが私の正規表現です:
検索用:
self.searchPattern=(<fieldset>)(.*?)(<idle2>)(.*?)(<value>)(.*?)(</value>)(.*?)(</idle2>)(.*?)(</fieldset>)
置換の場合:
self.replacePattern=`\g<1>\g<2>\g<3>\g<4><value>denemeasdasd\\\\n</value>\g<8>\g<9>\g<10>\g<11>`
これは検索用の python コードです。
self.pattern = re.compile(r''''''+self.searchPattern+'''''', flags = re.S | re.U)
そしてこれは交換用です
outtext = self.pattern.sub(r''''''+self.replacePattern+'''''',r''''''+self.match.group(0)+'''''')