如何使用 python 上的 re 模块拆分包含波斯语和英语单词的 str

How to split str, that contains farsi and english words using re module on python

我有 some_str = '获取有关硬盘 {hdd} 的信息'。我需要正则表达式将其按波斯语和非波斯语单词拆分以获得如下结果: ['获取有关信息', 'HDD {hdd}']

import re
some_str = 'دریافت اطلاعات در مورد HDD {hdd}'
regex = '???'
re.split(regex, some_str)

对于另一个类似 "اضافه کردن اعلام کننده {notifier} روی سرور {host} بوسیله کاربر {role}/{user} از آدرس های IP {ip_address}" 的字符串,我期待下一个结果:

['اضافه کردن اعلام کننده', '{notifier}', 'روی سرور', '{host}', 'بوسیله کاربر', '{role}/{user}', 'از آدرس های', 'IP {ip_address}']

你可以使用这个 re.split:

import re
# regex for arabic text
reg = re.compile('([\u0600-\u06FF]+(?:\s+[\u0600-\u06FF]+)*)\s*')

# or for matching Persian characters only use:
# [\u0622\u0627\u0628\u067E\u062A-\u062C\u0686\u062D-\u0632\u0698\u0633-\u063A\u0641\u0642\u06A9\u06AF\u0644-\u0648\u06CC]

some_str = 'دریافت اطلاعات در مورد HDD {hdd}'
lst1 = list(filter(None, reg.split(some_str)))
print (lst1)
## ['دریافت اطلاعات در مورد', 'HDD {hdd}']

s = "اضافه کردن اعلام کننده {notifier} روی سرور {host} بوسیله کاربر {role}/{user} از آدرس های IP {ip_address}"
lstw = list(filter(None, reg.split(s)))
print (lst2)
## ['اضافه کردن اعلام کننده', '{notifier} ', 'روی سرور', '{host} ', 'بوسیله کاربر', '{role}/{user} ', 'از آدرس های', 'IP {ip_address}']

\[\u0600-\u06FF\]用于匹配波斯语字符。

正则表达式详细信息:

  • ([\u0600-\u06FF]+(?:\s+[\u0600-\u06FF]+)*):在捕获组 #1
  • 的开头匹配 space 分隔的波斯语文本
  • \s*:匹配0个或多个whitespaces
  • (.*): 匹配捕获组 #2
  • 中字符串的剩余部分