如何用正则表达式替换python中的字符?

时间:2016-06-29 18:43:55

标签: python regex python-3.x

我一直想把德语字母换成英文写作方式:

Ä -> Ae
Ü -> Ue
ß -> ss

我试过这种方式:

re.sub("ö","oe",wordLineElements)
re.sub("Ö","Oe",wordLineElements)
re.sub("ä","ae",wordLineElements)
re.sub("Ä","Ae",wordLineElements)
re.sub("ü","ue",wordLineElements)
re.sub("Ü","Ue",wordLineElements)
re.sub("ß","ss",wordLineElements)

但看起来它不起作用,所以我需要用一个re.sub()

来做

这样做的正则表达方式是什么?

如果没问题,使用正则表达式的一般方法是什么?

4 个答案:

答案 0 :(得分:6)

您不需要正则表达式,str.translate()将是更好的选择:

d = {
    "ö": "oe",
    "Ö": "Oe",
    "ä": "ae",
    "Ä": "Ae",
    "ü": "ue",
    "Ü": "Ue",
    "ß": "ss"
}

s = "Ä test ß test Ü"
print(s.translate({ord(k): v for k, v in d.items()}))

打印:

Ae test ss test Ue

答案 1 :(得分:2)

问题是re.sub不会修改字符串,它返回一个新字符串。尝试:

wordLineElements = re.sub("ö","oe",wordLineElements)
wordLineElements = re.sub("Ö","Oe",wordLineElements)
wordLineElements = re.sub("ä","ae",wordLineElements)
wordLineElements = re.sub("Ä","Ae",wordLineElements)
wordLineElements = re.sub("ü","ue",wordLineElements)
wordLineElements = re.sub("Ü","Ue",wordLineElements)
wordLineElements = re.sub("ß","ss",wordLineElements)

答案 2 :(得分:2)

re.sub返回带替换的新字符串。所以你需要像wordLineElements = re.sub("ö","oe",wordLineElements)这样的东西。还有一个很好的答案here可以使用一些聪明的代码进行多次替换

答案 3 :(得分:0)

我想你已经有了解决方案,但是如果你想使用正则表达式re模块,那就在这里:

>>> sub_dict = {
                u"ö": "oe",
                u"Ö": "Oe",
                u"ä": "ae",
                u"Ä": "Ae",
                u"ü": "ue",
                u"Ü": "Ue",
                u"ß": "ss"
               }
>>> sub_regex = re.compile("(%s)"%"|".join([german_letter.decode('UTF-8') for german_letter in sub_dict.iterkeys()]))
>>> sub_regex.sub(lambda x: sub_dict[x.group(0)], u'asdasdsüadsadas')
102: u'asdasdsueadsadas'