您需要删除/替换任何单个德语字符,例如ü
。你如何让re.sub()理解unicode?
import re
re.sub(r'^\w{1}$', '', u'ü', re.U)
> u'\xfc'
上面的代码不工作,但为什么如果:
re.U, re.UNICODE 为\ W,\ W,\ B,\ B, \ d,\ D,\ s和\ S序列依赖于Unicode字符属性数据库。还为IGNORECASE启用非ASCII匹配。
您需要删除/替换任何单个德语字符,例如ü
。你如何让re.sub()理解unicode?
import re
re.sub(r'^\w{1}$', '', u'ü', re.U)
> u'\xfc'
上面的代码不工作,但为什么如果:
re.U, re.UNICODE 为\ W,\ W,\ B,\ B, \ d,\ D,\ s和\ S序列依赖于Unicode字符属性数据库。还为IGNORECASE启用非ASCII匹配。
re.sub()
以flags
作为第5个参数,而不是第4个参数。第四个是count
。这将工作:
>>> re.sub(r'^\w$', '', u'ü', flags=re.U)
u''
@Novaterata:如果它是为了人类消费,为什么要以一种会改变或破坏意义的方式来代替它?使用'unidecode'。如果它不适合人类消费,为什么你必须更换它?如果你想替换一个特定的字符,为什么使用're.sub'而不是'.replace()'?.如果你想替换多个,为什么使用重复的'.replace()'而不是'.translate()'?几乎总是比正则表达式更好。它取决于上下文,但OP没有给我们任何(并且在任何情况下都处于错误的轨道上)。 – hop
@Novaterata:问题和答案是不够的,因为它们是。 – hop
老实说,python2.7文档应该强调使用'flags'这个词,因为它在文档中也被错误地使用,因此不断混淆。 – minerals
你可能不应该用这种方式替换国际字符。有更好的解决方案,比如'unidecode'模块甚至'str.translate()'。 – hop