使用regex package:
>>> import regex
>>> text = 'ذوب 6 خوی 7 بزاق ،آبدهان ، یم 10 زهاب، 11 آبرو، حیثیت، شرف'
>>> regex.findall(r'\p{L}+', text.replace('\u200c', ''))
['ذوب', 'خوی', 'بزاق', 'آبدهان', 'یم', 'زهاب', 'آبرو', 'حیثیت', 'شرف']
- 文本包含零宽度非连接符 (U+200C)。使用
str.replace 删除字符。
-
\p{L} 或 \p{Letter} 匹配来自任何语言的任何类型的字母。
见Regex Tutorial - Unicode Characters and Properties。
更新
要同时包含 U+200C,请改用 [\p{Cf}\p{L}]+(\p{Cf} 或 \p{Format} 匹配不可见的格式字符):
>>> regex.findall(r'[\p{Cf}\p{L}]+', text)
['ذوب', 'خوی', 'بزاق', 'آب\u200cدهان', 'یم', 'زهاب', 'آبرو', 'حیثیت', 'شرف']
看起来和你想要的不一样,但它们是相等的:
>>> got = regex.findall(r'[\p{Cf}\p{L}]+', text)
>>> want = [ 'ذوب','خوی','بزاق','آبدهان','یم','زهاب','آبرو','حیثیت' ,'شرف']
>>> print(want)
['ذوب', 'خوی', 'بزاق', 'آب\u200cدهان', 'یم', 'زهاب', 'آبرو', 'حیثیت', 'شرف']
>>> got == want
>>> got[:3]
['ذوب', 'خوی', 'بزاق']
>>> got[4:]
['یم', 'زهاب', 'آبرو', 'حیثیت', 'شرف']
更新2
已编辑问题中的某些单词包含空格。
>>> ' ' in 'منهدم کردن'
True
我在下面的代码中添加了\s 来匹配空格,然后从匹配的字符串中去除前导、尾随空格,然后过滤掉空字符串。
>>> text = 'منهدم کردن : 1 خراب کردن، ویران کردن، تخریب کردن 2 نابود کردن، از بین بردن'
>>> want = ['منهدم کردن','خراب کردن', 'ویران کردن', 'تخریب کردن','نابود کردن', 'از بین بردن']
>>> [x for x in map(str.strip, regex.findall(r'[\p{Cf}\p{L}\s]+', text)) if x] == want
True