我一直想把德语字母换成英文写作方式:
Ä -> 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()
这样做的正则表达方式是什么?
如果没问题,使用正则表达式的一般方法是什么?
答案 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'