python - 使用正则表达式 (Python) 查找和添加缺失的子字符串
问题描述
我有一个字符串格式的 XML,看起来或多或少像这样:
<item>
<property 1> value </property 1>
<property 2> value </property 2>
<property 3> value </property 3>
</item>
<item>
<property 1> value </property 1>
<property 2> value </property 2>
<property 3> value </property 3>
<property 4> value </property 4>
</item>
正如您在此示例中看到的,第一个item
缺少property 4
. 我想做的是找到所有item
缺少的property 4
并手动添加。
这是一个更大的 Python 脚本的一部分,我尝试使用正则表达式方法 re.findall 和 re.search 来查找所有丢失的子字符串,然后使用 re.sub 添加所述子字符串,但我根本无法让它工作.
任何帮助将不胜感激:)谢谢
解决方案
甚至不必为正则表达式解决方案而烦恼。由于 XML 是一种非常规语言,因此正则表达式解决方案注定会失败(如果不是今天,那么明天,只要 XML 字符串发生变化)。
使用适当的 XML 工具并搜索所需的标记。如果缺少,请添加它。您只需要确保您的输入字符串采用有效的 XML 格式(这意味着一个根元素并且标签名称中没有空格)。
from xml.etree import ElementTree as ET
xml_str = '''<root>
<item>
<property_1> value </property_1>
<property_2> value </property_2>
<property_3> value </property_3>
</item>
<item>
<property_1> value </property_1>
<property_2> value </property_2>
<property_3> value </property_3>
<property_4> value </property_4>
</item>
</root>'''
xml = ET.fromstring(xml_str)
for item in xml.iter('item'):
prop_4 = item.find('property_4')
if prop_4 is None:
prop_4 = ET.Element('property_4')
prop_4.text = ' value '
item.append(prop_4)
print(ET.tostring(xml).decode())
# <root>
# <item>
# <property_1> value </property_1>
# <property_2> value </property_2>
# <property_3> value </property_3>
# <property_4> value </property_4>
# </item>
# <item>
# <property_1> value </property_1>
# <property_2> value </property_2>
# <property_3> value </property_3>
# <property_4> value </property_4>
# </item>
# </root>
推荐阅读
- python - Removing extra characters when reading csv
- java - 快速移动鼠标时相机有时会倒置
- angular - Wait for multiple http requests to finish before running a function in angular
- mysql - 与多个 AND 谓词混淆
- spring - Updating array afte doing a post request
- facebook - Facebook 目录像素产品数据源 - 删除已删除的产品
- r - code to query the table and produce a country code grouped and plot bar plot
- google-app-engine - How to fix the "Invalid JSON payload received. Unknown name" error
- docker - How do I make redisearch docker image persist data?
- python - 如何将这个用 Lasagne 编写的损失函数转换为 Keras?