次の形式のパラメータファイルがあります。
parameter-name parameter-value
パラメータの順序は任意ですが、1行に1つのパラメータしかありません。 1つのパラメータのparameter-value
を新しい値に置き換えます。
私はPythonの string.replace(pattern, sub)
を使う行を置き換えるためにline replace関数 以前にポストされた を使っています。私が使っている正規表現は、例えばvimでは動作しますが、string.replace()
では動作しないようです。
これが私が使っている正規表現です。
line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s" % (fileIn))
ここで、"interfaceOpDataFile"
は置き換えようとしているパラメータ名(大文字と小文字を区別しない場合は/ i)、新しいパラメータ値はfileIn
変数の内容です。
Pythonにこの正規表現を認識させる方法はありますか、それともこのタスクを実行する別の方法がありますか?
str.replace()
v2 | v3 正規表現を認識しません。
正規表現を使用して置換を実行するには、re.sub()
を使用してください。 v2 | v3。
例えば:
import re
line = re.sub(
r"(?i)^.*interfaceOpDataFile.*$",
"interfaceOpDataFile %s" % fileIn,
line
)
ループの中では、最初に正規表現をコンパイルする方が良いでしょう。
import re
regex = re.compile(r"^.*interfaceOpDataFile.*$", re.IGNORECASE)
for line in some_file:
line = regex.sub("interfaceOpDataFile %s" % fileIn, line)
# do something with the updated line
re.sub 関数を探しています。
import re
s = "Example String"
replaced = re.sub('[ES]', 'a', s)
print replaced
axample atring
を印刷します
まとめとして
import sys
import re
f = sys.argv[1]
find = sys.argv[2]
replace = sys.argv[3]
with open (f, "r") as myfile:
s=myfile.read()
ret = re.sub(find,replace, s) # <<< This is where the magic happens
print ret
re.sub
は間違いなくあなたが探しているものです。そして、あなたは知っている、あなたはアンカーとワイルドカードを必要としない。
re.sub(r"(?i)interfaceOpDataFile", "interfaceOpDataFile %s" % filein, line)
同じことをするでしょう - "interfaceOpDataFile"のように見える最初の部分文字列を照合してそれを置き換えます。