我有一个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中有未更改的版本和更改的版本,我不想要。
答案 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
是什么。