Python中检测Unicode含0x016b Macron并替换字符串的方法
解决方法
首先明确两个错误点:
- 你之前用字符串
'016b'检测,这是字符编码的十六进制字符串形式,不是实际的Unicode字符,自然匹配不到目标字符。 ord()函数只能接收单个字符作为参数,传入整个字符串肯定会报错。
针对你的需求,最简单的实现方式是直接使用目标Unicode字符本身来检测和替换:
方法一:直接检测并替换目标字符
# Python 2 place_name = u'Kūla Mountain' # 0x016b对应的Unicode字符是u'\u016b' if u'\u016b' in place_name: # 可以替换单个字符,也直接替换为固定目标字符串 place_name = place_name.replace(u'\u016b', u'u') # place_name = u'Kula Mountain' # Python 3(无需u前缀) place_name = 'Kūla Mountain' if '\u016b' in place_name: place_name = place_name.replace('\u016b', 'u')
方法二:批量规范化(可选,若需处理更多带长音符号的字符)
如果后续需要处理其他带长音符号的字符,可以用unicodedata模块将Unicode字符规范化为普通字符:
import unicodedata def remove_macrons(s): # 分解字符为基础字符+附加符号,再过滤掉长音符号 normalized = unicodedata.normalize('NFKD', s) return ''.join([c for c in normalized if not unicodedata.combining(c)]) place_name = u'Kūla Mountain' place_name = remove_macrons(place_name) # 结果为u'Kula Mountain'
但根据你的补充说明,只需要检测0x016b,方法一完全足够,更简洁高效。
内容的提问来源于stack exchange,提问作者gwydion93
相关产品推荐
相关产品推荐

