段落の最初の行にある文字列fooを変更せずに変更したい。私はすでにPerlで行っているように、正確な文字列にマッチさせるために^と$を使っていますが、まだ運がありません。助けてください。文字列を正確な文字列に一致させて再置換する
マイコード:
bar afooa
事前
に感謝の代わりに段落の最初の行にある文字列fooを変更せずに変更したい。私はすでにPerlで行っているように、正確な文字列にマッチさせるために^と$を使っていますが、まだ運がありません。助けてください。文字列を正確な文字列に一致させて再置換する
マイコード:
bar afooa
事前
に感謝の代わりに^と$、境界に一致するように使用\ bを:だから
input_file = "foo afooa"
input_file = re.sub(r'^foo$', 'bar', input_file)
print input_file
、私はこのような結果を期待しています。 docから
>>> a="foo afooa"
>>> b= re.sub(r"\bfoo\b",'bar',a)
>>> b
'bar afooa'
>>>
、あなただけのパターンの最初の出現を変更するre.sub()
のcount = 1
を設定することができます。また、foo
という単語だけを含む行全体を検索したくないので、^
と$
を削除してください。サンプルコード:
import re;
input_file = "foo afooa";
input_file = re.sub(r'foo', 'bar', input_file, count = 1);
print input_file;
あなたの正規表現は、現在、基本的に文字列 'foo' でのみに一致するr'^foo$'
です。
r'^foo'
に変更した場合は、文字列の先頭に 'foo'がある限り一致しますが、以前のパターンとは異なり、fooに続くものは気になりません。ここで
input_file = "foo afooa"
input_file = re.sub(r'^foo', 'bar', input_file)
input_file2 = "foob afooa"
input_file2 = re.sub(r'^foo', 'bar', input_file2)
print input_file
print input_file2
出力:あなたは、文字列の一部と一致しますが、全体で文字列「foo」を一致させたくない場合は、今
bar afooa
barb afooa
ラインの開始、その後、あなたは、以下に示すように、境界「\ b」が試合を追加する必要があります。
input_file = "foo afooa"
input_file = re.sub(r'^foo\b', 'bar', input_file)
input_file2 = "foob afooa"
input_file2 = re.sub(r'^foo\b', 'bar', input_file2)
print input_file
print input_file2
出力:
bar afooa
foob afooa
それともあなただけの完全な単語「foo」での最初の出現を交換したい場合は、その後、@DineshPundkarによって提案されたパターンを使用して、@ Tuan333今述べたように1個の置換の数を制限します。
ので、このケースでは、あなたのコードは次のようになります。
input_file = "a foo afooa foo bazfooz"
input_file = re.sub(r'\bfoo\b', 'bar', input_file, 1)
print input_file
出力:
a bar afooa foo bazfooz
あなたはre.subを把握することができましたか? – sisanared