Python 如何用另外两个字符替换一个umlaut和以下字符
我需要用它们的两个字母等价物(Ae、Ae、Oe、Oe、Ue、Ue、ss)替换德语的Umlauts(Ä、ä、Ö、ö、Ü、ü、ß) 目前,我有这个函数,但是字符串的长度发生了变化:Python 如何用另外两个字符替换一个umlaut和以下字符,python,regex,Python,Regex,我需要用它们的两个字母等价物(Ae、Ae、Oe、Oe、Ue、Ue、ss)替换德语的Umlauts(Ä、ä、Ö、ö、Ü、ü、ß) 目前,我有这个函数,但是字符串的长度发生了变化: def _translate_umlauts(s): """Translate a string into ASCII. This Umlaut translation comes from http://stackoverflow.com/a/2400577/152439 """ tr
def _translate_umlauts(s):
"""Translate a string into ASCII.
This Umlaut translation comes from http://stackoverflow.com/a/2400577/152439
"""
trans = {"\xe4" : "ae"} # and more ...
patt = re.compile("|".join(trans.keys()))
return patt.sub(lambda x: trans[x.group()], s)
但是,我要求字符串的总长度不应改变。例如,Mär应该成为Mae
非常感谢您在导出适当解决方案(regex?)方面提供的任何帮助:)
。。。字符串的总长度不应更改
这是个奇怪的要求,但是
patt = re.compile("([" + "".join(trans.keys()) + "]).")
请注意,如果umlaut是字符串中的最后一个字符,则它不会替换umlaut。由于明显的原因,这将更改字符串长度。只需将其截断回原始字符串长度即可:
return patt.sub(lambda x: trans[x.group()], s)[:len(s)]
那么,您可以使用正则表达式匹配
Ä。
并用Ae
替换它。。。但是如果最后一个字符是Ä
,那么这就行不通了,而且不加区别地吃下下面的字符是一件非常奇怪的事情,不是吗?字符串长度不应该改变?这是多么愚蠢的要求?真奇怪。在做了替换之后,你如何区分“löten”和“lösen”之间的区别,它们都会导致“loeen”?