манипуляции со строками — re.sub в jython

Скажем, у меня есть строка, подобная этой, «это утверждение», и если я хочу найти и заменить строку на это «это ** утверждение»,

строка для поиска this is a statement , this si a statement , this ia statement и любая комбинация преобразует их в это обрезать утверждение a , т.е. для любой комбинации слов между this и a оператор замените его на trim для другого набора замените fun на notfun .

так это программа

import re
file=open('file','r+')
search=re.sub('this \(a_zA_Z0_9)+ a statement','\1trim',file),('this is fun','this is notfun',file)
file.close()

что-то не так, так как в файле ничего не меняется.

всем спасибо.


person kdev    schedule 22.12.2009    source источник


Ответы (1)


re.sub не работает с файлами, работает со строками. Вам нужно прочитать содержимое файла в строку, затем использовать re.sub для изменения строки, а затем записать измененную строку обратно в файл.

Простой пример:

text = open("myfile.txt").read()
# This is your original re.sub call, but I'm not sure it really does what you want.
text = re.sub('this \(a_zA_Z0_9)+ a statement', '\1trim', text)
text = re.sub('this \(a_zA_Z0_9)+ another replacement', 'some other thing', text)
open("myfile.txt", "w").write(text)
person Ned Batchelder    schedule 22.12.2009
comment
не могли бы вы показать мне на приведенном выше примере, как я могу это сделать. Спасибо - person kdev; 22.12.2009
comment
Спасибо, Нед, на самом деле это был мой главный вопрос, как я могу заменить две разные строки, поэтому re.sub('this (a_zA_Z0_9)+ a statement', '\1trim', text),re.sub('это весело ','это не весело',файл) так что вкратце два re.sub могут работать в одной строке или нет ? если нет, как выполнить эту часть. Еще раз спасибо за помощь. - person kdev; 22.12.2009
comment
Нет необходимости делать обе замены в одной строке, просто дважды вызовите re.sub, поскольку я отредактировал ответ. Не забудьте принять его, если он работает для вас! :) - person Ned Batchelder; 22.12.2009