Python替换为重用未知字符串

时间:2012-07-13 08:39:57

标签: python replace capture-group

我有一个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中被奇怪的符号替换。另外,它打印了两次。我的XML中有未更改的版本和更改的版本,我不想要。

2 个答案:

答案 0 :(得分:3)

您遇到的问题不是由于您的正则表达式模式。字符串中的反斜杠(\)正在转义前进字符,从而导致您看到的怪异符号

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

始终使用raw string notation来定义您的重新模式。

>>> 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>

答案 1 :(得分:0)

为什么要在更换操作中包含内容?您所需要做的就是:

  • <string>替换为<xyz>
  • </string>替换为</xyz>

这需要两次操作,但代码的意图很明确,您不需要知道unknown string是什么。