分裂与破折号在python字符串和数字



我有两个列表chapterverse

文本,我想增加这些列表如下:

"الشورى22-23","السجدة44-55"

翻译成"Alshoura22-23";Alsadjah44-55">

输出应该是:

chapter=["الشورى","السجدة"]

verse=["22-23","44-55"

我尝试了许多方法,如回归和迭代通过每个字符,但无济于事!你能帮帮我吗?

谢谢

正则表达式提供了一种实现此目标的方法。

data = ["الشورى22-23", "السجدة44-55"]
verse = [re.findall(r'd+-d+', s)[0] for s in data]
# ['22-23', '44-55']
chapter = [data[i].replace(verse[i], '') for i in range(len(verse))]
# ['الشورى', 'السجدة']

如果您想以两种方式打印,您可以使用带有捕获组的模式来匹配允许的字符,然后将正确的组添加到正确的集合:

对于当前示例字符串:

import re
lst = ["الشورى22-23", "السجدة44-55"]
pattern = r"([u0600-u06FF]+)(d+-d+)"
verse = []
chapter = []
for s in lst:
m = re.match(pattern, s)
if m:
verse.append(m.group(1))
chapter.append(m.group(2))
print(chapter)
print(verse)

输出
['22-23', '44-55']
['الشورى', 'السجدة']

对于这两个组合,检查捕获组值:

import re
lst = ["الشورى22-23", "السجدة44-55", "11-22السجدة"]
pattern = r"([u0600-u06FF]+)(d+-d+)|(d+-d+)([u0600-u06FF]+)"
chapter = []
verse = []
for s in lst:
for t in re.findall(pattern, s):
chapter.append(t[1] if t[1] else t[2])
verse.append(t[0] if t[0] else t[3])
print(chapter)
print(verse)

输出
['22-23', '44-55', '11-22']
['الشورى', 'السجدة', 'السجدة']

最新更新