drs*_*drs 12 python string arabic
在拉丁文字中,字母有大写和小写形式.在Python中,如果要比较两个字符串而不考虑它们的情况,可以使用'string'.upper()或将它们转换为相同的case'string'.lower()
在阿拉伯语脚本中,字母可以具有初始,中间或最终形式.是否有类似的方法来比较阿拉伯字符串而不关心字母所在的形式?
这有两个部分,适用于所有语言:*
在两者之间,它处理英语大写和小写,阿拉伯语初始/中间/最终(加隔离),德语ß与ss,é作为单个代码点对比e\N{COMBINING ACUTE ACCENT},中文旋转字符,日语半宽假名,可能各种其他你没有想过的事情.
在Python中,它看起来像这样:
>>> s1 = '?'
>>> s2 = '?'
>>> unicodedata.normalize('NFKD', s1).casefold() == unicodedata.normalize('NFKD', s2)
True
Run Code Online (Sandbox Code Playgroud)
请注意,casefold直到Python 3.3才添加.如果你使用的是早期版本的Python,那么PyPI就有实现; 使用它们应该类似于使用3.3+内置.
如果您有兴趣究竟如何这个工程的阿拉伯语,而不仅仅是它适用于阿拉伯语与所有其他语言沿着事实上,你已经阅读unicode.org的算法和表.IIRC,建议这样做的W3C文件解释了为什么它使用阿拉伯语作为例子.我相信这是因为Unicode将初始,中间,最终和隔离视为同一字符的兼容性等效表示形式,因此对分解进行规范化可以有效地提供隔离形式以及案例折叠可以跳过或转换的修饰符,即使直接在案例折叠上组合字符只返回字符本身.
*在少数情况下,两种不同的语言或文化使用相同的脚本,但具有不同的案例折叠规则; 在这种情况下,您需要特定于语言环境的casefolding,Python不包含.但这不应该与此相关.
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |