2017-09-11 97 views
0

您需要删除/替换任何单个德语字符,例如ü你如何让re.sub()理解unicode?

import re 
re.sub(r'^\w{1}$', '', u'ü', re.U) 
> u'\xfc' 

上面的代码不工作,但为什么如果:

re.Ure.UNICODE 为\ W,\ W,\ B,\ B, \ d,\ D,\ s和\ S序列依赖于Unicode字符属性数据库。还为IGNORECASE启用非ASCII匹配。

+0

你可能不应该用这种方式替换国际字符。有更好的解决方案,比如'unidecode'模块甚至'str.translate()'。 – hop

回答

1

re.sub()flags作为第5个参数,而不是第4个参数。第四个是count。这将工作:

>>> re.sub(r'^\w$', '', u'ü', flags=re.U) 
u'' 
+0

@Novaterata:如果它是为了人类消费,为什么要以一种会改变或破坏意义的方式来代替它?使用'unidecode'。如果它不适合人类消费,为什么你必须更换它?如果你想替换一个特定的字符,为什么使用're.sub'而不是'.replace()'?.如果你想替换多个,为什么使用重复的'.replace()'而不是'.translate()'?几乎总是比正则表达式更好。它取决于上下文,但OP没有给我们任何(并且在任何情况下都处于错误的轨道上)。 – hop

+0

@Novaterata:问题和答案是不够的,因为它们是。 – hop

+0

老实说,python2.7文档应该强调使用'flags'这个词,因为它在文档中也被错误地使用,因此不断混淆。 – minerals