如何在不破坏句子的情况下将句子中的每个字母替换?

时间:2018-10-05 10:21:27

标签: python-3.x

这是我的问题。

    sentence = "This car is awsome."

我想做的是

    sentence.replace("a","<emoji:a>")
    sentence.replace("b","<emoji:b>")
    sentence.replace("c","<emoji:c>")

以此类推...

当然,如果我这样做,"<emoji:>"中的字母也将随着我的替换而被替换。那我该怎么办呢?

2 个答案:

答案 0 :(得分:2)

如Carlos Gonzalez所建议:

创建一个映射字典,并将其依次应用于每个字符:

sentence = "This car is awsome."

# mapping
up = {"a":"<emoji:a>",
      "b":"<emoji:b>",
      "c":"<emoji:c>",}

# apply mapping to create a new text (use up[k] if present else default to k)
text = ''.join( (up.get(k,k) for k in sentence) )

print(text)

输出:

This <emoji:c><emoji:a>r is <emoji:a>wsome.

''.join( ... generator ...)内部的生成器表达式的优点在于,它接受sentence的每个单个字符并将其保留或替换。它只触及每个字符一次,因此不存在多重替换的危险,sentence仅需传递一次即可转换整个对象。

Doku:dict.get(key,default)Why dict.get(key) instead of dict[key]?


如果您使用

sentence = sentence.replace("a","o")
sentence = sentence.replace("o","k")

您首先要从o制作a,然后再从任何k(或之前的o)制作a-您必须触摸每个角色两次才能实现。

使用

up = { "a":"o", "o":"k" }
text = ''.join( (up.get(k,k) for k in sentence) )

避免这种情况。

答案 1 :(得分:1)

如果您想一次替换多个字符,则使用正则表达式会更容易。受Passing a function to re.sub in Python

的启发
import re 

sentence = "This car is awsome."

up = {"is":"Yippi",
      "ws":"WhatNot",}

# modified it to create the groups using the dicts key
text2 = re.sub( "("+'|'.join(up)+")", lambda x: up[x.group()], sentence)

print(text2)

输出:

ThYippi car Yippi aWhatNotome.

Doku:re.sub(pattern, repl, string, count=0, flags=0)

如果您想使用特定于“ regex”的特定字符,这些字符在用作正则表达式模式时会特别注意,则必须格外小心。 .+*?()[]^$