我遇到了一个问题,找到一个舒适的方法来分割文本的列表预定义的句子。句子可以包括任何特殊字符和任何绝对习惯。
范例:
text = "My name. is A. His name is B. Her name is C. That's why..."
delims = ["My name. is", "His name is", "Her name is"]
我想要的是:
def custom_sentence_split(text, delims):
# stuff
return result
custom_sentence_split(text, delims)
# ["My name. is", " A. ", "His name is", " B. ", "Her name is", " C. That's why..."]
UPD。嗯,可能有像那样的非舒适解决方案,我宁愿得到更舒适的解决方案
def collect_output(text, finds):
text_copy = text[:]
retn = []
for found in finds:
part1, part2 = text_copy.split(found, 1)
retn += [part1, found]
text_copy = part2
return retn
def custom_sentence_split(text, splitters):
pattern = "("+"|".join(splitters)+"|)"
finds = list(filter(bool, re.findall(pattern, text)))
output = collect_output(text, finds)
return output
21012;,似乎找到了解决方案。
pattern = "("+"|".join(map(re.escape, delims)) +")";
re.split(pattern, text)
2条答案
按热度按时间v1l68za41#
你想使用
re.split
方法。你需要一个像
(My\sname\sis|His\sname\sis|Her\sname\sis)
这样的正则表达式字符串你可以像
"("+"|".join(map(re.escape, delims))+")"
那样构造正则表达式字符串编辑:你可以这样做:
gmxoilav2#