Python翻译,如何只替换一个单词

时间:2012-04-26 03:41:07

标签: python text replace language-translation

所以我试图在python中创建一个翻译器(在s60设备中)。所以我要做的就是在不触及其他单词的情况下替换一个完整的单词。这是一个例子

原文:“棕色的狐狸跳过名叫布朗尼的狗。” 我想将“褐色”改为“deathlesi”(只是忽略原因) 结果应该是: “死神狐狸跳过名叫布朗尼的狗。” 但它改变了字符串中的“brownie”,结果是: “死神狐狸跳过名为deathlesiie的狗。”

由于我试图取代每一个词,有时它会陷入永无止境的悖论。 例: “我很蠢” 我试图将“我”改为“ium”,这就是发生的事情。 “iumumumumumumumumumumumumumumuiuiumumumumumum ...”,它基本上改变了字符串中的每个“I”,并且在字符串中没有“I”之前不会停止。

有任何帮助吗?谢谢!

编辑:我已经尝试了“stringhere”.replace()但是像小写“i”这样的某些部分通常会替换愚蠢的“i”。

这是另一个例子: “人们对巨型野兔感到兴奋。”将“are”替换为“iume”,而不是 “人们对这只巨大的兔子感到很兴奋。”它也取代了导致的“野兔” “人们对这个巨大的hiume感到兴奋。”

据说我把这个句子排成一行并翻译出来。 那是我现在的方法。基本上将每个单词转换为数组并转换它们中的每一个。然后做一个

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])

仍然会抛出一个“特定的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

5 个答案:

答案 0 :(得分: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会将替换的文本制作工具放在一起,或者将(\W+|^)放回去。

PS

如果你很懒,只需制作捕获群(\W+|$)和{{1}} ......

答案 1 :(得分: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,则两个匹配项都将被替换。

字符串是不可变的,因此您必须重新分配新字符串。每次执行replace时,您都会生成一个新字符串。

如果你不想要内置的话,你也可以写一个循环来找到第N次出现。

我建议你缩短帖子(我的意思是更少的单词,更多的语法高亮)。格式化它。 如果我没有正确阅读你的帖子,请纠正我。

答案 2 :(得分:0)

只需调用string的替换函数

"I am stupid".replace("I", "ium")

答案 3 :(得分:0)

我现在没有python,但是如何创建一个函数将字符串转换为列表。你可以拿出空白区域,所以列表将是[The,brown,fox,jumps ...]。然后做一个.replace。

答案 4 :(得分:0)

您想要替换完全相同的单词。不是string.replace()

  

替换“是”但不要替换“野兔”

如果是这样的话

编辑

正如@Niall所说,Regular Expression search and replace是满足您任务的最佳工具。

或者,如果你刚开始学习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.'