python - 如何使用正则表达式从字符串中仅检索阿拉伯语文本?

标签 python regex string python-2.7 unicode

我有一个包含阿拉伯语和英语句子的字符串。我想要的是只提取阿拉伯语句子。

my_string="""
What is the reason
ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ
behind this?
ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ
"""

This Link表明阿拉伯字母的 Unicode 范围是 0600-06FF

所以,我想到的非常基本的尝试是:

import re
print re.findall(r'[\u0600-\u06FF]+',my_string)

但是,这失败了,因为它返回了以下列表。

['What', 'is', 'the', 'reason', 'behind', 'this?']

如您所见,这与我想要的完全相反。我在这里缺少什么?

注意

我知道我可以使用如下所示的反向匹配来匹配阿拉伯字母:

print re.findall(r'[^a-zA-Z\s0-9]+',my_string)

但是,我不想那样。

最佳答案

您可以使用 re.sub用空字符串替换 ascii 字符。

>>> my_string="""
... What is the reason
... ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ
... behind this?
... ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ
... """
>>> print(re.sub(r'[a-zA-Z?]', '', my_string).strip())
ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ

ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ

您的正则表达式不起作用,因为您使用的是 Python 2 并且您的字符串是 str 您需要将 my_string 转换为 unicode 才能正常工作。然而,它在 Python3.x 上完美运行

>>> print "".join(re.findall(ur'[\u0600-\u06FF]', unicode(my_string, "utf-8"), re.UNICODE))
ذَلِكَالْكِتَابُلَارَيْبَفِيهِهُدًىلِلْمُتَّقِينَذَلِكَالْكِتَابُلَارَيْبَفِيهِهُدًىلِلْمُتَّقِينَ

关于python - 如何使用正则表达式从字符串中仅检索阿拉伯语文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36661837/

相关文章:

javascript - 如何正确为 IBAN 数组添加空格

php - 如何获得 789 之前所有可能的数字组合?

Python 字符串 boolean 比较

python - 在打印语句中包含一个整数

python - 限制仪表板用户 Django-Oscar (Sandbox Gateway App)

python - 删除python中的大量空格

将编译时常量字符串与字符代码来自#define 的字符连接起来

python - 如何将melt/wide_to_long应用于具有多列的数据框?

regex - 是否可以改进此正则表达式以在 Excel 单元格中查找编号的文本行以避免错误匹配?

regex - mongodb 不能将 $and 与 String 一起使用