如何基于正则表达式条件编辑文本文件的行?

3
import re

re_for_identificate_1 = r""

with open("data_path/filename_1.txt","r+") as file:
    for line in file:
        #replace with a substring adding a space in the middle
        line = re.sub(re_for_identificate_1, " milesimo", line)

        #replace in txt with the fixed line

例子 filename_1.txt

unmilesimo primero
1001°

dosmilesimos quinto
2005°

tresmilesimos
3000°

nuevemilesimos doceavo
9012°

我需要的 正确输出 文件是这个:

重写后的输入文件是filename_1.txt

un milesimo primero
1001°

dos milesimos quinto
2005°

tres milesimos
3000°

nueve milesimos doceavo
9012°

我需要的正则表达式是什么,最好的方法是什么,以便在输入文件中将固定行替换为原始位置?


你必须用Python做这个吗?使用sed可能更容易。 - Michael M.
@MichaelM。是的,我必须使用Python来完成这个任务,因为它是程序的一部分,需要将序数数字与其他部分分开。 - Santiago Nahuel Rodriguez
1个回答

4
你可以使用file.seek(0)将文件指针移到文件开头,然后写入数据并截断文件。像这样:
import re

re_for_identificate_1 = "(?<!^)milesimo"

tmp = ""
with open("data.txt", "r+") as file:
    for line in file:
        line = re.sub(re_for_identificate_1, " milesimo", line)
        tmp += line
    file.seek(0)
    file.write(tmp)
    file.truncate()

您需要使用的正则表达式是"(?<!^)milesimo",用于将每个“milesimo”替换为“ milesimo”,但不会在行首进行替换。

我认为正则表达式是故意留空的 - 问题是“我需要什么正则表达式”。 - Barmar
@Barmar 抱歉,没听清楚。 - Michael M.
1
这甚至不需要成为一个正则表达式,你只需要使用 line = line.replace('milesimo', ' milesimo') - Barmar
@MichaelM,我发现一个问题,这一行是“milesimo”,但是这段代码会输出“ milesimo”,这不好,因为空格不在两个单词的中间,例如“dos milesimos”。因此需要使用正则表达式,正则表达式是替换条件。 - Santiago Nahuel Rodriguez
1
也许更合适的是用$1 milesimos替换(un|dos|tres|...)milesimos。但是这样你需要列举所有可能的数字。 - Barmar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接