コードに文字列があります(完全に小文字のアルファベットで構成されています)。同じ文字列で置き換える予定の文字の後に、別の文字が表示されることを条件として、文字を置き換える必要があります。たとえば、置き換える文字が「e」で条件付き文字が「t」の場合、「ジャングル」ではなく「森」で「e」を置き換えます。これを簡単な方法で行う方法はありますか。 Python?この問題に時間を割いていただきありがとうございます。
PS私が使用している文字にはアルファベットの繰り返しがないことに注意してください。
後に続くすべてのオカレンスを置き換える場合e
はt
、次を使用できます。
>>> import re
>>> re.sub(r'e(?=.*t)', 'i', 'forest')
'forist'
>>> re.sub(r'e(?=.*t)', 'i', 'jungle')
'jungle'
>>> re.sub(r'e(?=.*t)', 'i', 'greet')
'griit'
これは、文字を消費せずに文字列の後半にあるかどうかを確認するゼロ幅アサーションである先読みを使用します。t
これにより、正規表現はe
、最初の条件だけでなく、この条件に適合するそれぞれを見つけることができます。
>>> import re
>>> re.sub(r'e(.*t)', r'i\1', "forest")
'forist'
>>> re.sub(r'e(.*t)', r'i\1', "jungle")
'jungle'
どうしたの?
if st.find("e") < st.find("t"):
st.replace("e","i",1)
とその読み取り可能
発生が一意でない場合は、次のこともできます。
>>> pos_t=st.find("t")
>>> "".join(e if (e != 'e' or i > pos_t) else 'i' for i,e in enumerate(st))
これにより、最後の t の前にある部分が次の場合、すべての 'e' が 'i' に置き換えられます。
def sub(x):
return x[:x.rfind('t')].replace('e','t') + x[x.rfind('t'):]
結果:
>>> sub('feeoeresterette')
'fttotrtsttrttte'
>>> sub('forest')
'fortst'
>>> sub('greet')
'grttt'
>>> sub('theater')
'thtater''
以下は、あなたが望むことをするべき関数です:
>>> def replace(source, replacee, replacement, conditional):
... if source.find(replacee) < source.rfind(conditional):
... return source.replace(replacee, replacement)
... else:
... return source
または、冗長にしたくない場合は、次のようにします。
>>> def replace(source, replacee, replacement, conditional):
... return source.find(replacee) < source.rfind(conditional) and source.replace(replacee, replacement) or source
どちらの yield でも同じ結果が得られるはずです。いくつかの例を次に示します。
>>> replace('forest', 'e', 'i', 't')
'forist'
>>> replace('jungle', 'e', 'i', 't')
'jungle'
>>> replace('tales', 'e', 'i', 't')
'tales'