1

だから私はPythonで(s60デバイスで)トランスレータを作成しようとしています。したがって、'しようとしているのは、他の単語に触れることなく、1つの単語全体を置き換えることです。これが例です

オリジナル:「ブラウニーという名前の犬を茶色のキツネが飛び越えます。」「brown」という単語を「deathlesi」に置き換えたい(理由は無視してください)結果は次のようになります。「deathlesifoxがbrownieという名前の犬を飛び越えます。」しかし、代わりに、文字列の「ブラウニー」も変更され、「deathlesifoxはdeathlesiieという名前の犬を飛び越えます」という結果になります。

私はすべての単語を置き換えようとしているので、時々それは終わりのないパラドックスに陥ります。例:「私は愚かです」私は「私」を「ium」に変えようとしています、そしてこれは何が起こるかです。「iumumumumumumumumumumumumumumumumumumumum。

何か助けはありますか?ありがとう!

編集:私はすでに「stringhere」.replace()を試しましたが、小文字の「i」のような特定の部分は通常、愚かな「i」を置き換えます。

別の例を次に示します。「人々は巨大なウサギに興奮しています。」「巨大なウサギに興奮する人々iume」の代わりに、「are」を「iume」に置き換えます。また、「うさぎ」に取って代わり、「巨大なヒウメに興奮する人々のイウメ」を生み出しました。

おそらく私は文を配列し、それぞれを翻訳しました。それが今の私の現在の方法です。基本的に、各単語を配列に変換し、それぞれを変換します。次に、

translated_sentence=["particulus:people", "iume:are", "geus:getting", "exchantus:excited", "d:at", "qun:the", "gesas:giant", "hsont:hare"]
sentence= "People are getting excited at the giant hare."
for i in translated_sentence do
element=i.split(":")
sentence=sentence.replace(element[1], element[0])

それでも、「particulus uime geus exchantus d qun gesas huime(hsontの代わりに)」をスローします。

私はそれを理解しました。文字列を配列に分割し、現在の単語をクリーンアップして元の単語に対してstring.replace()を実行することにより、フォーマットを保持しました。

sentence="The quick brown fox jumps over the lazy dog.".split(" ")
result=""

for i in sentence:

cleaned=clean(i) #removes the punctuations and stuff leaving the raw word.

translated=translate(cleaned) #returns the translated word

result=result+i.replace(cleaned,translated)+" "

return result
4

5 に答える 5

2

これは正規表現のシナリオのように聞こえます:

import re
x = "The brown fox jumps over the dog named brownie."
newstring = re.sub(r"(\s+|[:punct:]+|^)brown(\s+|[:punct:]+|$)",r"\1deathlies\2",x, flags=re.IGNORECASE)

どちらが得られますか:

>>> print newstring
The deathlies fox jumps over the dog named brownie.

または:

x = "People are getting excited at the giant hare."
newstring = re.sub(r"(\s+|[:punct:]+|^)are(\s+|[:punct:]+|$)",r"\1iume\2",x, flags=re.IGNORECASE)

どの収量:

>>> print newstring
People iume getting excited at the giant hare.

最初のキャプチャグループ(\s+|[:punct:]+|^)はスペース、句読点、または文字列の先頭に一致し、他のグループ(\s+|[:punct:]+|$)は文字列の末尾に一致します。

置換を行うときは、置換されたテキストで句読点または間隔を元\1\2戻し、物事をきれいにします。

PS

怠け者の場合は、キャプチャグループ(\W+|^)を作成して(\W+|$)...

于 2012-04-26T04:15:48.637 に答える
1

最初の発生のみを見つけたいので、それを追跡する方法が必要です。あなたはこれを多くの方法で行うことができます。これと同じくらい簡単です:

def replacer(original, looking_for, replace_with):
   ''' A straightforward way... '''
   return original.replace(looking_for, replace_with, 1)
   #return regex.sub(replace_with, looking_for, 1)

数字は、置換するオカレンスの数を示します。2つ存在し、2を入力すると、両方のオカレンスが置き換えられます。

文字列は不変であるため、新しい文字列を再割り当てする必要があります。実行するたびreplaceに、新しい文字列を生成します。

組み込みが必要ない場合は、ループを記述してN番目のオカレンスを見つけることもできます。

投稿を短くすることをお勧めします(つまり、単語を減らし、構文のハイライトを増やします)。フォーマットします。あなたの投稿を正しく読んでいない場合は訂正してください。

于 2012-04-26T04:15:34.597 に答える
0

文字列のreplace関数を呼び出すだけです

"私は愚かです".replace( "I"、 "ium")
于 2012-04-26T03:48:02.450 に答える
0

今はPythonを持っていませんが、文字列をリストに変換する関数を作ってみませんか。空白を取り除くことができるので、リストは[The、brown、fox、jumps...]になります。次に、.replaceを実行します。

于 2012-04-26T03:57:18.203 に答える
0

完全に等しい単語を置き換えたい。string.replace()ではありません

「are」を置き換えますが、「hare」は置き換えないでください

だとしたら

編集

@Niallが言ったように、正規表現の検索と置換は、タスクを満たすための最良のツールです。

または、Pythonの学習を始めたばかりで、正規表現が複雑すぎる場合。を使用して文字列を単語に分割し、単語をstr.split()ループします。

def simply_replace(string, search, replace):
    words = string.split(' ')
    for i in range(len(words)):
        if(words[i].lower() == search):
            words[i] = replace
    return ' '.join(words)

>>> simply_replace("I am stupid", 'i', 'ium')
'ium am stupid'
>>> simply_replace("The brown fox jumps over the dog named brownie.", 'brown', 'deathly')
'The deathly fox jumps over the dog named brownie.'
>>> simply_replace("People are getting excited at the giant hare.", 'are', 'ium')
'People ium getting excited at the giant hare.'
于 2012-04-26T04:15:50.987 に答える