检查字符串是否包含python中除波斯语/阿拉伯语字符以外的字符

时间:2018-03-18 09:26:12

标签: python

有没有办法检查字符串是否包含python中的任何非阿拉伯语,非波斯语字符?

1 个答案:

答案 0 :(得分:4)

我不知道有任何将Unicode代码点分类为脚本的库。

您可以使用搜索块的名称或字符的名称;像这样的东西:

name = unicodedata.name(ch).lower()
if 'arabic' in name or 'persian' in name:
    # ...

但那非常hacky。例如,那将包括旧波斯语脚本,但不包括鲁米数字,我怀疑如果你想要其中一个,你也想要另一个。

所以,你真正想做的是查看Unicode标准,看看包含阿拉伯语和波斯语字形的所有块,并确定你做哪些不想包含的字符。

或者,对于快捷方式:维基百科有一篇关于Arabic script in Unicode的文章。如果您正在考虑将来的这个答案,您可能需要使用新的Space Persian字母以及所有这些来验证这是最新的Unicode 23.0,但截至今天,它看起来是最新的。所以,我要从那里复制一下:

  • 阿拉伯语(0600-06FF,255个字符)
  • 阿拉伯语补充(0750-077F,48个字符)
  • 阿拉伯语扩展-A(08A0-08FF,73个字符)
  • 阿拉伯语演示表格-A(FB50-FDFF,611个字符)
  • 阿拉伯语演示表格-B(FE70-FEFF,141个字符)
  • Rumi数字符号(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'):
    # ...

当然我怀疑你是否想要所有这些,但是应该明白如何修改它以匹配你想要的那些。

你可能会想要一些不是阿拉伯语或波斯语的其他角色 - 例如,可能or ch.isspace(),或其他范围变化,或者角色类检查。< / p>

如果你想把它变成一个正则表达式,你应该能够弄清楚如何编写一个包含你想要的范围的正则表达式字符类。 (如果没有,你不应该使用正则表达式。)