有没有办法在 python 中检查字符串是否包含任何非阿拉伯语、非波斯语字符?
最佳答案
我不知道有任何库将 Unicode 代码点分类为脚本。
你可以使用搜索方 block 的名字,或者角色的名字;像这样:
name = unicodedata.name(ch).lower()
if 'arabic' in name or 'persian' in name:
# ...
但这很老套。例如,这将包括古波斯文字之类的东西,但不包括鲁米数字,我怀疑如果你想要其中之一,你也会想要另一个。
因此,您真正想要做的是查看 Unicode 标准以查看包含阿拉伯语和波斯语字形的所有 block ,然后决定要包含哪些和不想包含哪些。
或者,对于快捷方式:维基百科有一篇关于 Arabic script in Unicode 的文章.如果您正在查看 future 的答案,您可能想要验证这是否是 Unicode 23.0 的最新版本以及新的 Space Persian 字母和所有其他内容,但截至今天,它看起来是最新的。所以,我将从那里复制:
- 阿拉伯语(0600–06FF,255 个字符)
- 阿拉伯语补充(0750–077F,48 个字符)
- 阿拉伯语扩展 A(08A0–08FF,73 个字符)
- 阿拉伯文表示形式-A(FB50–FDFF,611 个字符)
- 阿拉伯文表示形式-B(FE70–FEFF,141 个字符)
- 鲁米数字符号(10E60–10E7F,31 个字符)
- 阿拉伯数学字母符号(1EE00—1EEFF,143 个字符)
如果你想要所有这些,你只需这样做:
if ('\u0600' <= ch <= '\u06FF' or
'\u0750' <= ch <= '\u077F' or
'\u08A0' <= ch <= '\u08FF' or
'\uFB50' <= ch <= '\uFDFF' or
'\uFE70' <= ch <= '\uFEFF' or
'\U00010E60' <= ch <= '\U00010E7F' or
'\U0001EE00' <= ch <= '\U0001EEFF'):
# ...
当然,我怀疑您是否想要所有这些,但是如何修改它以匹配您确实想要的那些应该是显而易见的。
而且您可能需要一些其他不是阿拉伯语或波斯语的字符——例如,可能是或 ch.isspace()
,或其他范围更改, 或字符类检查。
如果你想把它变成一个正则表达式,你应该能够弄清楚如何编写一个包含你想要的范围的正则表达式字符类。 (如果不是,则不应使用正则表达式。)
关于python - 检查字符串是否包含python中波斯语/阿拉伯语字符以外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49346329/