Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用另外两个字符替换一个umlaut和以下字符_Python_Regex - Fatal编程技术网

Python 如何用另外两个字符替换一个umlaut和以下字符

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

我需要用它们的两个字母等价物(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
    """
    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”?