我試圖用AndroidManifest.xml替換頻道名來批量生成一組用於發佈的頻道apk包。用匹配組python正則表達式替換
<meta-data android:value="CHANNEL_NAME_TO_BE_DETERMINED" android:name="UMENG_CHANNEL"/>
從一個xml文件。
通道CONFIGS被保存在配置文件中,某事像:
channel_name output_postfix valid
"androidmarket" "androidmarket" true
這裏是我的嘗試:
manifest_original_xml_fh = open("../AndroidManifest_original.xml", "r")
manifest_xml_fh = open("../AndroidManifest.xml", "w")
pattern = re.compile('<meta-data\sandroid:value=\"(.*)\"\sandroid:name=\"UMENG_CHANNEL\".*')
for each_config_line in manifest_original_xml_fh:
each_config_line = re.sub(pattern, channel_name, each_config_line)
print each_config_line
它取代了整個<meta-data android:value="CHANNEL_NAME_TO_BE_DETERMINED" android:name="UMENG_CHANNEL"/>
到androidmarket
這顯然不是我的需要。然後我發現問題是pattern.match(each_config_line)
返回一個匹配結果,其中一個結果組是「CHANNEL_NAME_TO_BE_DETERMINED」。我也試着給一些替換實現函數,但仍然失敗。
因此,由於我已經成功找到了模式,我該如何正確地替換匹配的結果組元素?
我現在沒有你想要做的過程,那麼你的預期輸出是什麼?我認爲你的誤解是,所有匹配的東西都會被取代。如果你想從模式中保留東西,你必須捕獲它並重新插入替換字符串。 (或者通過使用lookaround斷言來匹配那些東西) – stema
爲了使問題更加清楚,我想提一提:CHANNEL_NAME_TO_BE_DETERMINED在這裏是動態的,我需要的是將其替換爲某些有歧義的通道名稱。 – David