3

我想用另一个字符串替换文本中的某些行。到目前为止,我能够找到要替换的文本:

text = open('sample','r').read()
regex = re.compile('.*#= min, max\s')
for match in regex.finditer(text):
    print match.group(0) #this is what i want to replace

编辑:也试过

text = open('sample','r').read().split('\n')
for line in text:
    line = re.sub('.*#= min, max\s', "HOLA", line)

文本保持不变。难道是我的正则表达式搞砸了?我在其他地方用过同样的,没有问题。它也是一个简单的正则表达式。

如何切换到另一条线路?谢谢!

4

3 回答 3

1

我不确定我是否明白你想要什么。但是可以使用要替换的文本来调用regex对象的sub()函数,例如

regex.sub("new text", text)

或者使用一个函数获取一个匹配对象并返回要替换的文本,例如

def reverse(match):
    return match.group(0)[-1::-1]
    # or do whatever else you might want to do
regex.sub(reverse, text)

这样您就可以完全自由地决定替换什么。

请注意,由于.*您的正则表达式中的贪婪,这可能只替换最后一部分。一定要使用$(end of line), ^(start of line), .*?(non-greedy version) 和reoption MULTILINE

于 2012-09-12T08:34:06.890 回答
1

尝试:

subbedlines = []

with open('sample','r') as textreader:
    lines = textreader.read().split('\n')

for line in lines:
    subbedlines.append(re.sub('.*#= min, max\s', "HOLA", line))

如果您的正则表达式正确并且文本文件中的行匹配,则应该可以工作。再次写入文件只需执行以下操作:

with open('sample','w') as textwriter:
    for line in subbedlines:
        textwriter.write("%s\n" % line)
于 2012-09-12T09:31:09.213 回答
0

也许我不明白,但你为什么要逐行迭代,而不是像这样替换每一个:

import re

with open("text.txt") as text:
    new_text = re.sub("jj", "xx", text.read())
    with open("newtext.txt", "w") as result:
        result.write(new_text)

但也许我错过了一些东西。

于 2012-09-12T11:20:39.070 回答