我有一串有数字、英语和阿拉伯文本的数据,我只想扩展阿拉伯字母。结构有点困难,
@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:البيانات
كيف احدث
البيانات我试了几件事,比如:
print (' ' .join(re.findall('[\u0600-\u06FF]+', str(n))))但这不像我想的那样有效。
我想要的输出可以是一个列表、一个数据框架或另一个合适的结构。
"البريد يوصل لي البطاقة " , " لم تعد هناك حاجة الى البطاقة" , " شلون طريقة تحديث البيانات" , "احتاج احدث البيانات الشخصية "诸若此类。
发布于 2022-09-25 09:07:55
注:我既不会说也不会读阿拉伯语,所以我的解决方案可能是不完整的。
使用unicodedata提取阿拉伯字符(以及要保留的其他字符)。
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)这就产生了:
البريد يوصل
لي البطاقة ؟
لم تعد هناك حاجة إلى البطاقة
البطاقة
البطاقة
عادي اطلب البطاقة
عن طريق البريد
شلون طريقه تحديث
البيانات
البيانات
احتاج احدث
البيانات
الشخصية
البيانات
كيف احدث
البيانات发布于 2022-09-25 09:55:18
您的regex没有包含空格。
print(re.findall('(?!\s)[\s\u0600-\u06FF]+', str(n)))您还没有透露n是什么;我猜您可能也可以去掉str()。
(?!\s)查找是一个小的调整,以避免在换行符或其他空格上开始匹配。
https://stackoverflow.com/questions/73843003
复制相似问题