2016-02-24 171 views
4

我试图取代一个词与另一个发生:Python的字符串替换

word_list = { "ugh" : "disappointed"} 

tmp = ['laughing ugh'] 

for index, data in enumerate(tmp): 
    for key, value in word_list.iteritems(): 
     if key in data: 
      tmp[index]=data.replace(key, word_list[key]) 

print tmp 

鉴于此工程...的ughlaughing的发生也被替换输出:ladisappointeding disappointed.

如何避免这样的输出是laughing disappointed

+2

拆分空格上的字符串。仅替换完全匹配 –

+1

[可能的重复[Search and replace with“whole word only”option](http://stackoverflow.com/questions/17730788/search-and-replace-with-whole-word-only-option) –

回答

4

在这种情况下,您可能需要考虑逐字替换。

实施例:

word_list = { "ugh" : "disappointed"} 
tmp = ['laughing ugh'] 

for t in tmp: 
    words = t.split() 
    for i in range(len(words)): 
     if words[i] in word_list.keys(): 
      words[i] = word_list[words[i]] 
    newline = " ".join(words) 
    print(newline) 

输出:

laughing disappointed 

步骤分步说明:

  1. 获取每senten行政长官在TMP list

    for t in tmp: 
    
  2. 拆分句子译成words

    words = t.split() 
    
  3. 支票words任何word是否在word_listkeys。如果是这样,其value替换为:

    for i in range(len(words)): 
        if words[i] in word_list.keys(): 
         words[i] = word_list[words[i]] 
    
  4. 归队替换单词和打印结果出来:

    newline = " ".join(words) 
    print(newline) 
    
3

您可以通过使用正则表达式做到这一点:

>>> import re 
>>> re.sub(r'\bugh\b', 'disappointed', 'laughing ugh') 
'laughing disappointed' 

\b代表一个单词边界。

1

使用re.sub

for key, value in word_list.items(): 
    tmp = re.sub("\\b{}\\b".format(key), value, tmp[index]) 
0

你可以使用正则表达式:

import re 

for index, data in enumerate(tmp): 
    for key, value in word_list.iteritems(): 
     if key in data: 
      pattern = '\b' + key + '\b' 
      data = re.sub(pattern, value, data) 
      tmp[index] = data 

旁注:你需要data = ...线(覆盖data变量)否则将无法正常工作时word_list包含多个条目。

0

快速:

>>> [re.sub(r'\w+', lambda m: word_list.get(m.group(), m.group()), t) 
    for t in tmp] 
['laughing disappointed'] 
>>> 

非常快:

>>> [re.sub(r'\b(?:%s)\b' % '|'.join(word_list.keys()), lambda m: word_list.get(m.group(), m.group()), t) 
... for t in tmp] 
['laughing disappointed'] 
>>> 
1
word_list = { "ugh" : "disappointed", "123" : "lol"} 
tmp = ['laughing 123 ugh'] 

for word in tmp: 
    words = word.split() 
for i in words[:]: 
    if i in word_list.keys(): 
    replace_value = word_list.get(i) 
    words[words.index(i)] = replace_value 
output = " ".join(words) 
print output 

该代码将交换与该字典值的字典的每个键(所以你要替换的字)键(您希望它被替换的字)在每种情况下都有多个值!

Output: 
    laughing lol disappointed 

希望有所帮助!