我想編輯 xml 檔案中的屬性值并將每個“\n”替換為“(換行符)\n”。這是必要的,因為我需要在決議后保留 xml 檔案的結構,它是標準化的并且空格消失了,所以我想首先在空白之前添加像“換行符”這樣的字串,以便在決議 xml 檔案之后,它將被標準化并且空格將消失,我將編輯整個檔案并將字串“(換行符)”替換回單個“\ n”。
下圖顯示了我想要做的事情:

我嘗試使用正則運算式來獲取“value =”和“/>”之間的文本,但是如果它在一行中,我只能獲取值,而且我什至不知道之后如何編輯它。
import re
with open("file", "r") as f:
contents = f.readlines()
for line in contents:
result = re.search('value=(.*?) />', line)
print(result)
有我的檔案:
<Module bs="Mainfile_1">
<object id="1000" name="namex" number="1">
<item name="item0" value="100"/>
<item name="item00" value="100
100"/>
</object>
<object id="1001" name="namey" number="2">
<item name="item1" value="100"/>
<item name="item00" value="100"/>
</object>
<object id="1234" name="name1" number="3">
<item name="item1" value="FAIL"/>
<item name="item2" value="233"/>
<item name="item3" value="233
234
246"/>
<item name="item4" value="FAIL"/>
</object>
<object id="1238" name="name2" number="4">
<item name="item8" value="FAIL"/>
<item name="item9" value="233
234
245
246
267"/>
</object>
<object id="2345" name="name32" number="5">
<item name="item1" value="111"/>
<item name="item2" value="FAIL" />
</object>
<object id="2347" name="name4" number="6">
<item name="item1" value="FAIL"/>
<item name="item2" value="FAIL"/>
<item name="item3" value="233"/>
<item name="item4" value="FAIL"/>
</object>
</Module>
uj5u.com熱心網友回復:
您可以將re.sub與回呼一起使用。然后回呼可以根據需要修改匹配的字串。這里全部替換\n為(newline)\n.
在您的代碼中,您正在逐行迭代檔案的內容。這就是為什么你的正則運算式只能匹配一行。使用 f.read() 獲取一個字串中的全部內容。
把它們放在一起:
import re
def newlinerepl(matchobj):
return matchobj.group(0).replace("\n", "(newline)\n")
with open("file", "r") as f:
contents = f.read()
result = re.sub('value="([^"]*)"', newlinerepl, contents)
print(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457096.html
標籤:Python python-3.x 正则表达式 xml
上一篇:如何在Python中將嵌套的LaTeX宏與re匹配?
下一篇:禁用不必要的轉義字符:\
