python - 在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)
应该是قال جالينوس قد اتفق جل من فسر هذا الكتا
,但输入保持不变。
我应该怎么办?
解决方案
首先,您需要按照评论中的建议修复您的正则表达式,然后为了更有效的解决方案,您需要扩展您的 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 中运行上述两个文本的代码,你会得到:
请注意,阿拉伯语和英语之间共享的标点符号(如句点和括号)也已被删除。要保留这些,您需要引入更复杂的条件。
推荐阅读
- docker - 来自 nginx 的错误网关使用 docker-compose 发布
- javascript - 如何使用 React 从具有匹配键或名称的数组中拼接出数据
- hybris - Hybris 促销容器
- python - 字典值比较和重新分配
- python - 基于先前参数的 Cmd2 argparse 选项卡完成
- elixir - Ecto.Multi - 插入两条相关记录
- git - 无法获得 github 的命令行授权
- r - 在R中选择空单元格
- node.js - 如何获得 Sequelize 结果 WHERE MAX timestamps_of_multiple_nested_objects 大于某个日期?
- r - 如何找到 OPENDAP URL(NetCDF 文件)的正确 MIME 内容类型?