如果字符串以“1"开头,则替换标签之间的字符串; [英] Replace string between tags if string begins with "1"

查看:37
本文介绍了如果字符串以“1"开头,则替换标签之间的字符串;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

textextextextext10005991textextextextexttextextextextext<tag>20005992</tag>textextextextexttextextextextext<tag>10005993</tag>textextextextexttextextextextext<tag>20005994</tag>textextextextext

我想替换标记之间的任何以1"开头的字符串,以替换为我选择的字符串,然后写回文件.我尝试使用 line.replace 函数,该函数有效,但前提是我指定了字符串.

line=line.replace("10005991","YYYYYY")

理想输出:

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

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

解决方案

您可以使用 re 模块

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

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

引用自文档

<块引用>

返回通过替换 repl 替换 string 中最左边的不重叠模式出现的字符串.如果找不到模式,则返回字符串不变.

用法可能如下:

 with open("file") as f:对于 f 中的 i:使用 open("output") 作为 f2:f2.write(re.sub(r'<tag>1(\d+)</tag>','<tag>YYYYY</tag>',i))

I have a huge XML file (about 100MB) and each line contains something along the lines of <tag>10005991</tag>. So for example:

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

I want to replace any string between the tags and that begins with "1" to be replaced with a string of my choice and then write back to the file. I've tried using the line.replace function which works but only if I specify the string.

line=line.replace("<tag>10005991</tag>","<tag>YYYYYY</tag>")

Ideal output:

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

I've thought about using an array to pass each string in and then replace but I'm sure there's a much simpler solution.

解决方案

You can use the re 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 will replace the matched text with the second argument.

Quote from the doc

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.

Usage may be like:

with open("file") as f:
    for i in f:
       with open("output") as f2:
           f2.write(re.sub(r'<tag>1(\d+)</tag>','<tag>YYYYY</tag>',i))

这篇关于如果字符串以“1"开头,则替换标签之间的字符串;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆