我想用另一个字符串替换文本中的某些行。到目前为止,我能够找到我要替换的文本:
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)
文字保持不变。可能是我的正则表达式搞砸了吗?我在其他地方使用了同一个,没有问题。它也是一个简单的正则表达式。
如何将其切换到另一条线?谢谢!
答案 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)
但也许我错过了什么。