2017-04-10 22 views
1

これは簡単だと確信していますが、私は完全な初心者です。私は文字列を持ち、 'n' + [任意の子音]を検索し、その子音を2倍に置き換えるツールを作ろうとしています - 例えばパターン 'n' +(子音)を効率的に検索して置き換えます

aaanq - > aaaqq

私が考え得る唯一のことは、それぞれの可能なnCの組み合わせについて別個のケースで以下を見ることです。これを行うより良い方法はありますか? Pythonで

nC_test = input('Enter word: ') 

if 'nq' in nC_test: 
    print('nC pattern found ') 
    nC_test = nC_test.replace('nq', 'qq') 
    print(nC_test) 
+0

このPythonコードはありますか?関連タグを追加 –

+0

oops - thanks - done! – alice19

+1

正規表現以外のものはありますか? –

答えて

1

文字列が不変なので、あなたがそれらを変更したい場合は、単にリストに変換:

my_list = list(my_string) 

その後の文字が子音であるかどうかを確認するためにAUXILIAR関数を作成します。

これはまた、資本の文字をチェックしたい特別な子音(スペイン語ñ)、それはあなたのニーズに合うように、この機能を実装して自由に感じるかもしれませんが、多くの方法で行うことができます。

def is_consonant(character): 
    consonants = ['b','c',...,'z'] # complete the list yourself 
    if character in consonants: 
     return True 
    else: 
     return False 

その後あなたの文字列を繰り返し、string [i]が 'n'で、文字列[i + 1]が子音である位置を調べます。

for i in range(len(my_list)-1): 
    if my_list[i] == 'n' and is_consonant(my_list[i+1]): 
     print('nC pattern found ') 
     my_list[i] = my_list[i+1] 

我々は最後の要素までが、最後から二番目の1になるまで反復していないので、私たちが安全に、[I + 1] my_listというんことができます。 ENSであなたは、文字列が必要な場合は

、単なる文字列に戻ってリストを変換:

my_string = ''.join(my_list) 

注:次の2つの連続したnが続いている場合はケースを重ねることは望ましくない結果をもたらす可能性があることを考慮してください子音によって:

annq --> annq --> anqq 

ここで最初のn個の子音(N)が続き、その後、最初のnは、第1(有効な変化)によって置き換えられます。次に、次のループは "nq"を見て "qq"に変更しますが、結果の文字列には結果として "nq"が含まれます。

あなたがこのケースを考慮したかどうかわかりませんが、それを考慮に入れてください。あなたの結果が子音の後に続くnを含まないと仮定されているなら、あなたはこのケースを考慮に入れる必要があります。

+0

多くのご協力いただきありがとうございます! – alice19

関連する問題