Ersetzen Sie einen Funktionsblock in einer Datei mit Python
Ich habe einen Ruby-Funktionscodeblock in mehreren Dateien, den ich in jeder Datei ändern muss.
Die Funktion, die ich zu ersetzen versuche, sieht ungefähr so aus:
def func1 options
...
some code here
...
def inner_func1 inner_options
...
some code here
...
end
...
some more code here
...
end
Jede Datei enthält andere Funktionen, jedoch mit unterschiedlichen Namen. In einigen Dateien habe ich möglicherweise mehrere Tabulatoren oder Leerzeichen.
Ich möchte die func1in jeder Datei durch Inhalte ersetzen, die aus einer anderen Datei gelesen werden (die eine Variable sein kann, die im Parameter übergeben wird).
Bisher habe ich die folgende Python-Funktion geschrieben, damit sich eine solche Datei ändert:
import re
a = open('main.rb').read() # file where I have the func1
b = open('modified.rb').read() # file where I have only the modified func1
c = re.sub('(^[ \t]*)def func1:$.?\1end$',b,a, flags=re.DOTALL)
print(c)
with open('main.rb', 'w') as filetowrite:
filetowrite.write(c)
Meine cZeichenfolge zeigt jedoch nicht, dass an irgendetwas etwas geändert wurde.
Ich bin mir nicht sicher, ob mit meiner Regex etwas nicht stimmt.
Antworten
Bitte versuchen Sie es unter Regex
(?:^|\n)([\t ]*?)def func1 options[\s\S]*?\n\1end
Code
import re
input="""
def func1 options
some code here
def inner_func1 inner_options
some code here
end
some more code here
end
"""
replacement="""
def new_func1 options
new code here
end
"""
print(re.sub(r"(?:^|\n)([\t ]*?)def func1 options[\s\S]*?\n\1end",replacement,input),end='')
Ausgabe
def new_func1 options
new code here
end
Regex-Demo | Python-Demo