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

2024-09-29 02:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的XML文件(大约100MB),每一行都包含<tag>10005991</tag>的内容。例如:

textextextextext<tag>10005991<tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>10005993</tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext

我想替换标记之间的任何以“1”开头的字符串,用我选择的字符串替换,然后写回文件。我试过用线路。更换函数,但仅当我指定字符串时才有效。在

^{pr2}$

理想输出:

textextextextext<tag>YYYYYY<tag>textextextextext
textextextextext<tag>20005992</tag>textextextextext
textextextextext<tag>YYYYYY</tag>textextextextext
textextextextext<tag>20005994</tag>textextextextext

我曾考虑过使用一个数组来传递每个字符串,然后进行替换,但我确信有一个更简单的解决方案。在


Tags: 文件函数字符串标记内容tag数组xml
3条回答

您可以使用^{} module

>>> text = 'textextextextext<tag>10005991</tag>textextextextext'
>>> re.sub(r'<tag>1(\d+)</tag>','<tag>YYYYY</tag>',text)
'textextextextext<tag>YYYYY</tag>textextextextext'

re.sub将用第二个参数替换匹配的文本。在

引用文件

Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl. If the pattern isn’t found, string is returned unchanged.

用法可能是:

^{pr2}$

我想你最好用ElementTree

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

这里是开始解析的好地方:How do I parse XML in Python?

您可以使用regex,但由于您有多行字符串,因此需要使用^{}标志,并且在您的模式中,您可以使用positive look-around来匹配标记之间的字符串:

>>> 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

re.DOTALL

Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline.

同样,正如@Bhargav Rao在他的回答中所做的那样,您可以使用分组来代替环顾:

^{pr2}$

相关问题 更多 >