Python 如果字符串以";开头,则替换标记之间的字符串;1“;

Python 如果字符串以";开头,则替换标记之间的字符串;1“;,python,python-2.7,Python,Python 2.7,我有一个巨大的XML文件(大约100MB),每行都包含一些类似于10005991的内容。例如: textextextextext<tag>10005991<tag>textextextextext textextextextext<tag>20005992</tag>textextextextext textextextextext<tag>10005993</tag>textextextextext textextexte

我有一个巨大的XML文件(大约100MB),每行都包含一些类似于
10005991
的内容。例如:

textextextextext<tag>10005991<tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>10005993</tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext
textext10005991textextext
text20005992textextextext
text 10005993text
textext20005994textextextext
我想替换标记之间以“1”开头的任何字符串,替换为我选择的字符串,然后写回文件。我已尝试使用line.replace函数,该函数仅在指定字符串时有效

line=line.replace("<tag>10005991</tag>","<tag>YYYYYY</tag>")
line=line.replace(“10005991”、“yyyyy”)
理想输出:

textextextextext<tag>YYYYYY<tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>YYYYYY</tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext
textextextyyyyyyxtextextext
text20005992textextextext
textextextyyyyyyyxtextextextext
textext20005994textextextext
我曾考虑过使用数组传入每个字符串,然后替换,但我相信有一个更简单的解决方案。

您可以使用

你可以使用


您可以使用正则表达式,但由于您有一个多行字符串,您需要使用flag,并且在您的模式中,您可以用于标记之间的匹配字符串:

>>> print re.sub(r'(?<=<tag>)1\d+(?=</?tag>)',r'YYYYYY',s,re.DOTALL,re.MULTILINE)
textextextextext<tag>YYYYYY<tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>YYYYYY</tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext

>>print re.sub(r'(?您可以使用regex,但由于您有一个多行字符串,您需要使用flag,并且在您的模式中,您可以用于标记之间的匹配字符串:

>>> print re.sub(r'(?<=<tag>)1\d+(?=</?tag>)',r'YYYYYY',s,re.DOTALL,re.MULTILINE)
textextextextext<tag>YYYYYY<tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>YYYYYY</tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext

我认为你最好的选择是使用

主要思想是: 1) 解析文件 2) 找到元素值 3) 测试你的状况 4) 如果满足条件,则更换值


这里是一个开始解析的好地方:

我认为您最好的选择是使用

主要思想是: 1) 解析文件 2) 找到元素值 3) 测试你的状况 4) 如果满足条件,则更换值

下面是开始解析的好地方:

>>> print re.sub(r'(?<=<tag>)1\d+(?=</?tag>)',r'YYYYYY',s,re.DOTALL,re.MULTILINE)
textextextextext<tag>YYYYYY<tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>YYYYYY</tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext
>>> print re.sub(r'<tag>(1\d+)</?tag>',r'<tag>YYYYYY</?tag>',s,re.DOTALL,re.MULTILINE)
textextextextext<tag>YYYYYY</?tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>YYYYYY</?tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext