如何在Python中提取混合字符串中的阿拉伯字母?
解决方案
问题分析
你之前使用的正则[-ۿ]+存在两个核心问题:
- 字符范围包含大量非阿拉伯字母的符号(如数字标记、特殊标点),导致提取内容混杂无关字符;
- 未覆盖阿拉伯语的呈现形式变体(如连写字母),也未保留文本内部的空格,无法提取完整的阿拉伯语句。
可行实现方法
1. 提取为列表
使用精准匹配阿拉伯语字符(含呈现形式)和空格的正则,过滤掉纯空格的无效项,得到完整的阿拉伯语句列表:
import re # 示例混合内容字符串 input_str = "123 hello البريد يوصل لي البطاقة 456 world لم تعد هناك حاجة الى البطاقة 789 test شلون طريقة تحديث البيانات احتاج احدث البيانات الشخصية " # 匹配阿拉伯文本块(覆盖标准阿拉伯字母、变体及空格) arabic_matches = re.findall(r'[\u0600-\u06FF\u0750-\u077F\uFB50-\uFDFF\uFE70-\uFEFF\s]+', input_str) # 过滤纯空格项并去除首尾空格 arabic_sentences = [sent.strip() for sent in arabic_matches if sent.strip()] print(arabic_sentences)
输出结果:
["البريد يوصل لي البطاقة", "لم تعد هناك حاجة الى البطاقة", "شلون طريقة تحديث البيانات", "احتاج احدث البيانات الشخصية"]
2. 转换为DataFrame
如果需要结构化存储,可将列表转为pandas DataFrame:
import pandas as pd # 基于上面得到的arabic_sentences创建DataFrame df = pd.DataFrame(arabic_sentences, columns=['阿拉伯语句']) print(df)
输出结果:
阿拉伯语句 0 البريد يوصل لي البطاقة 1 لم تعد هناك حاجة الى البطاقة 2 شلون طريقة تحديث البيانات 3 احتاج احدث البيانات الشخصية
可选调整:保留阿拉伯标点
如果需要保留阿拉伯语专属标点(如问号؟、逗号،),可在正则中添加对应字符:
arabic_matches = re.findall(r'[\u0600-\u06FF\u0750-\u077F\uFB50-\uFDFF\uFE70-\uFEFF\s\u061F\u060C]+', input_str)
内容的提问来源于stack exchange,提问作者Maha Mohammed
相关产品推荐
相关产品推荐

