也许我可以使用更好的英语,但我想要的是忽略单词中的重音(和类似的),所以:
renè
、
rené
、
rene'
和
rene
应该是相同的,所以应该
mañana
和
manana
或
even-distribuited
和
even distribuited
,可能还有
shouldn't
和
shouldnt
我记得一个函数(源自新闻),用于例如互联网页面地址,该函数应该去掉空格、重音等,但我不记得名字了。我认为它应该有效,但其他方式也被接受
谢谢
你可以用几种不同的方法在 Python 中将字符串规范化,以便忽略重音符号(例如,将
rené
、
rené
、
rene'
和
rene
视为相同)。以下是两种最流行的方法:
1. 使用
unicodedata.normalize()
此方法涉及将字符串规范化为标准 Unicode 形式,可以选择删除重音符号。以下是如何操作:
import unicodedata
def normalize_string(text):
"""将字符串规范化,删除重音符号并转换为小写。"""
text = unicodedata.normalize('NFD', text).encode('ascii', 'ignore').decode('utf-8')
return text.lower()
# 示例用法
string1 = "renè"
string2 = "rené"
string3 = "rene'"
string4 = "rene"
print(normalize_string(string1)) # 输出:rene
print(normalize_string(string2)) # 输出:rene
print(normalize_string(string3)) # 输出:rene
print(normalize_string(string4)) # 输出:rene
此代码执行以下操作:
-
unicodedata.normalize('NFD', text)
: 这会将字符串text
规范化为其“规范化分解”形式,该形式将字符分解为其基本部分和组合字符(例如,重音符号)。 -
.encode('ascii', 'ignore')
: 这会尝试将字符串编码为 ASCII。由于重音符号不是 ASCII 字符,因此将被忽略。 -
.decode('utf-8')
: 这会将生成的字节字符串解码回一个 Unicode 字符串。 -
.lower()
: 这会将字符串转换为小写,以便比较字符串时忽略大小写。
2. 使用
unidecode
库
unidecode
库提供了一种将 Unicode 文本转换为 ASCII 文本的简单方法,同时删除了重音符号并尽可能保持可读性。
首先,需要安装库:
pip install unidecode
然后,可以按如下方式使用它:
from unidecode import unidecode
def normalize_string(text):
"""使用 unidecode 库将字符串规范化。"""
return unidecode(text).lower()
# 示例用法
string1 = "mañana"
string2 = "manana"
print(normalize_string(string1)) # 输出:manana
print(normalize_string(string2)) # 输出:manana
此方法更易于阅读和理解,并且在大多数情况下都能产生良好的结果。
这两种方法都可以帮助将字符串规范化,以便忽略重音符号。选择哪种方法取决于的具体需求和偏好。
标签:python,string,compare From: 78786982