用字符串Python替换'match'对象

时间:2012-09-12 08:26:53

标签: python regex string replace

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

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)

文字保持不变。可能是我的正则表达式搞砸了吗?我在其他地方使用了同一个,没有问题。它也是一个简单的正则表达式。

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我不确定我是否理解你想要的东西。但可以使用要替换的文本调用regex个对象的sub() function,例如

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)

这样您就可以完全自由决定要替换的内容。

请注意,由于正则表达式中的贪婪.*,这可能只会替换最后一部分。请务必使用$(行尾),^(行首),.*?(非贪婪版本)以及re选项{{1 }}

答案 2 :(得分: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)

但也许我错过了什么。