我有一个包含阿拉伯语和英语句子的字符串。我想要的是只提取阿拉伯语句子。
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/