2016-09-11 16 views
0

段落の最初の行にある文字列fooを変更せずに変更したい。私はすでにPerlで行っているように、正確な文字列にマッチさせるために^と$を使っていますが、まだ運がありません。助けてください。文字列を正確な文字列に一致させて再置換する

マイコード:

bar afooa 

事前

に感謝の代わりに
+0

あなたはre.subを把握することができましたか? – sisanared

答えて

0

^と$、境界に一致するように使用\ 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' 
>>> 
1

、あなただけのパターンの最初の出現を変更する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; 
1

あなたの正規表現は、現在、基本的に文字列 '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 
関連する問題