所以我试图在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
答案 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.'