首页 > 解决方案 > 在python中反转正则表达式模式

问题描述

我正在尝试仅从字符串中过滤阿拉伯字符,但下一个函数对我不起作用:

import re

def remove_any_non_arabic_char(text):
    non_arabic_char = re.compile('^[\u0627-\u064a]')
    text = re.sub(non_arabic_char, "", text)
    print(text)

例如:

s = "Kühn xvii, 346] قال جالينوس: [1] قد اتفق جل من فسر هذا الكتا"

的期望输出remove_any_non_arabic_char(s)应该是قال جالينوس قد اتفق جل من فسر هذا الكتا,但输入保持不变。

我应该怎么办?

标签: pythonarabicre

解决方案


首先,您需要按照评论中的建议修复您的正则表达式,然后为了更有效的解决方案,您需要扩展您的 Unicode 字符选择以包括所有阿拉伯字符映射。最后,您需要在阿拉伯语单词之间至少保留一个空格,以使阿拉伯语文本清晰易读:

import re

def remove_any_non_arabic_char(text):
    non_arabic_char = re.compile('[^\s\\u0600-\u06FF]')
    text_with_no_spaces = re.sub(non_arabic_char, "", text)
    text_with_single_spaces = " ".join(re.split("\s+", text_with_no_spaces))
    return text_with_single_spaces

text_1 = "Kühn xvii, 346] قال جالينوس: [1] قد اتفق جل من فسر هذا الكتا"

text_2 = '''
تغيّر مفهوم كلمة (أدب) من العصر الجاهلي jahili (pre-Islamic) era إلى الآن عبر
مراحل periods التاريخ المتعددة. ففي الجاهلية، كانت كلمة أدب تعني (الدعوة إلى
الطعام). وبعدها، استخدم الرسول محمد (عليه السلام) الكلمة بمعنى "التهذيب والتربية"
education and mannerism. وفي العصر الأموي، اتصلت had to do كلمة أدب
بالتاريخ والفقه والقرآن والحديث. أما في العصرالعباسي، فأصبحت تعني تعلّم الشعر
والنثر prose واتسع الأدب ليشمل أنواع المعرفة وألوانها وخصوصاً علم البلاغة واللغة.
أما في الوقت الحالي، فأصبحت كلمة أدب ذات صلة pertinent بالكلام البليغ
الجميل المؤثر that impacts في أحاسيس القاريء أو السامع.
''' 
# Isleem, N. M., & Abuhakema, G. M. (2020). Kalima wa Nagham: A Textbook for
# Teaching Arabic, Volume 2 (Vol. 3). University of Texas Press. (page 5)

print('text_1: \n', remove_any_non_arabic_char(text_1))
print('\ntext_2: \n\n', remove_any_non_arabic_char(text_2))

在 Jupyter 中运行上述两个文本的代码,你会得到:

在此处输入图像描述

请注意,阿拉伯语和英语之间共享的标点符号(如句点和括号)也已被删除。要保留这些,您需要引入更复杂的条件。


推荐阅读