2

次のようにタググループの1つの名前を変更したいXMLがあります。

<string>ABC</string>
<string>unknown string</string>

する必要があります

<xyz>ABC</xyz>
<xyz>unknown string</xyz>

ABCは常に同じなので、問題ありません。ただし、「不明な文字列」は常に異なりますが、この情報を抽出する必要があるため、同じ文字列を置き換えて保持したいと思います。

これが私がこれまでに得たものです:

    import re
    #open the xml file for reading:
    file = open('path/file','r+')
    #convert to string:
    data = file.read()
    file.write(re.sub("<string>ABC</string>(\s+)<string>(.*)</string>","<xyz>ABC</xyz>[\1]<xyz>[\2]</xyz>",data))
    print (data)
    file.close()

キャプチャグループを使用しようとしましたが、正しく使用できませんでした。XMLでは、文字列が奇妙な記号に置き換えられています。さらに、2回印刷されます。XMLに変更されていないバージョンと変更されたバージョンの両方がありますが、これは望ましくありません。

4

2 に答える 2

3

発生している問題は、正規表現パターンが原因ではありません。文字列内のバックスラッシュ ( \) は、後続の文字をエスケープしているため、奇妙な記号が表示されます。

>>> print "hello\1world"
helloworld
>>> print r"hello\1world"
hello\1world

re パターンを定義するには、常に生の文字列表記を使用してください。

>>> data = """
... <string>ABC</string>
... <string>unknown string</string>
... """
>>> print re.sub(r"<string>ABC</string>(\s+)<string>(.*)</string>",r"<xyz>ABC</xyz>\1<xyz>\2</xyz>",data)

<xyz>ABC</xyz>
<xyz>unknown string</xyz>
于 2012-07-13T08:57:54.030 に答える
0

交換操作にコンテンツを含めるのはなぜですか?あなたがする必要があるのは:

  • <string>に置き換え<xyz>ます。
  • </string>に置き換え</xyz>ます。

2つの操作が必要ですが、コードの意図は明確であり、何unknown stringであるかを知る必要はありません。

于 2012-07-13T08:41:35.227 に答える