如何在Python中检测字符串是否包含非波斯/阿拉伯字符?
在Python中检查字符串是否包含阿拉伯语/波斯语以外的字符
这其实用正则表达式就能轻松解决,核心思路是定义阿拉伯语和波斯语覆盖的Unicode字符范围,然后检查字符串里有没有不在这个范围内的字符。我给你写好可直接用的代码,再拆解细节:
核心实现代码
import re def has_non_arabic_persian_chars(text): # 正则模式:匹配所有不属于阿拉伯语/波斯语相关Unicode区块的字符 # 涵盖了阿拉伯语基本区、补充区、扩展区,以及波斯语特有的字符 non_ap_pattern = re.compile(r'[^\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]') # 如果找到匹配的字符,说明存在非阿语/波斯语字符 return bool(non_ap_pattern.search(text))
测试示例
你可以用这些例子验证效果:
# 纯波斯语字符串 print(has_non_arabic_persian_chars("سلام دنیا")) # 输出: False(无其他字符) # 混合英语和波斯语 print(has_non_arabic_persian_chars("Hello سلام")) # 输出: True(包含英语) # 纯阿拉伯语字符串 print(has_non_arabic_persian_chars("مرحبا بالعالم")) # 输出: False(无其他字符) # 包含数字的波斯语 print(has_non_arabic_persian_chars("سلام 123")) # 输出: True(包含数字)
细节调整
如果你的场景需要允许某些特殊字符(比如空格、数字),只需要把这些字符加到正则的「允许列表」里就行:
比如允许空格的版本:
def has_non_arabic_persian_chars_with_space(text): # 在原范围基础上加入\s(匹配所有空白字符:空格、制表符等) pattern = re.compile(r'[^\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF\s]') return bool(pattern.search(text)) print(has_non_arabic_persian_chars_with_space("سلام دنیا")) # 输出: False(空格被允许)
如果需要更严格的匹配(比如只允许纯阿语/波斯语字母,排除变音符号),可以缩小Unicode范围,比如只保留核心字母:
# 仅允许阿拉伯语和波斯语的基本字母 strict_pattern = re.compile(r'[^\u0621-\u063A\u0641-\u064A\u067E\u0686\u0698\u06A9\u06AF\u06BE\u06CC]')
内容的提问来源于stack exchange,提问作者Navid777
相关产品推荐
相关产品推荐

