首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中阿拉伯字母的提取范围

python中阿拉伯字母的提取范围
EN

Stack Overflow用户
提问于 2022-09-25 08:21:27
回答 2查看 66关注 0票数 1

我有一串有数字、英语和阿拉伯文本的数据,我只想扩展阿拉伯字母。结构有点困难,

代码语言:javascript
运行
复制
@service:Card Issuance
البريد يوصل 
لي البطاقة ؟
09/21/2022 @ 2:43 PM
Open conversation
#CMP_Cards_Lost
@closureReason:لم تعد هناك حاجة إلى البطاقة
@cardchoice:البطاقة 4
@cardchoice:البطاقة 2
2 more...
عادي اطلب البطاقة 
عن طريق البريد
09/21/2022 @ 2:43 PM
Open conversation
#FAQ_Request_Card_Delivery
@service:Card Delivery
شلون طريقه تحديث 
البيانات
09/21/2022 @ 2:43 PM
Open conversation
#NVG_SS_UpdatingData
@data:البيانات
احتاج احدث 
البيانات
 الشخصية
09/21/2022 @ 2:43 PM
Open conversation
#NVG_SS_UpdatingData
@data:البيانات
كيف احدث 
البيانات

我试了几件事,比如:

代码语言:javascript
运行
复制
 print (' ' .join(re.findall('[\u0600-\u06FF]+', str(n))))

但这不像我想的那样有效。

我想要的输出可以是一个列表、一个数据框架或另一个合适的结构。

代码语言:javascript
运行
复制
"البريد يوصل لي البطاقة " , " لم تعد هناك حاجة الى البطاقة" , " شلون طريقة تحديث البيانات" , "احتاج احدث البيانات الشخصية "

诸若此类。

EN

回答 2

Stack Overflow用户

发布于 2022-09-25 09:07:55

注:我既不会说也不会读阿拉伯语,所以我的解决方案可能是不完整的。

使用unicodedata提取阿拉伯字符(以及要保留的其他字符)。

代码语言:javascript
运行
复制
import unicodedata

txt = """@service:Card Issuance
البريد يوصل 
لي البطاقة ؟
09/21/2022 @ 2:43 PM
Open conversation
#CMP_Cards_Lost
@closureReason:لم تعد هناك حاجة إلى البطاقة
@cardchoice:البطاقة 4
@cardchoice:البطاقة 2
2 more...
عادي اطلب البطاقة 
عن طريق البريد
09/21/2022 @ 2:43 PM
Open conversation
#FAQ_Request_Card_Delivery
@service:Card Delivery
شلون طريقه تحديث 
البيانات
09/21/2022 @ 2:43 PM
Open conversation
#NVG_SS_UpdatingData
@data:البيانات
احتاج احدث 
البيانات
 الشخصية
09/21/2022 @ 2:43 PM
Open conversation
#NVG_SS_UpdatingData
@data:البيانات
كيف احدث 
البيانات"""

# Additional characters to keep
keep = " "

origlines = txt.splitlines()
outlines = []
for ln in origlines:
    cleaned = "".join(
        [c for c in ln if "ARABIC" in unicodedata.name(c) or c in keep]
    )
    if cleaned and not cleaned.isspace():
        outlines.append(cleaned.strip())

for oln in outlines:
    print(oln)

这就产生了:

代码语言:javascript
运行
复制
البريد يوصل
لي البطاقة ؟
لم تعد هناك حاجة إلى البطاقة
البطاقة
البطاقة
عادي اطلب البطاقة
عن طريق البريد
شلون طريقه تحديث
البيانات
البيانات
احتاج احدث
البيانات
الشخصية
البيانات
كيف احدث
البيانات
票数 1
EN

Stack Overflow用户

发布于 2022-09-25 09:55:18

您的regex没有包含空格。

代码语言:javascript
运行
复制
print(re.findall('(?!\s)[\s\u0600-\u06FF]+', str(n)))

您还没有透露n是什么;我猜您可能也可以去掉str()

(?!\s)查找是一个小的调整,以避免在换行符或其他空格上开始匹配。

演示:https://ideone.com/P7MXEw

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73843003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档