分享自己写的一段代码。该代码可以实现如下的功能:
输入“我是蜘蛛侠,我从小就活泼好动,还抢过美国队长的盾“这句话,并且指定关键词【美国队长, 蜘蛛侠】,在关键词的前后增加html标签b来进行加粗。
得到输出“我是蜘蛛侠,我从小就活泼好动,还抢过美国队长的盾“
调用方法
input_str = "我是蜘蛛侠,我从小就活泼好动,还抢过美国队长的盾"
keyword_list = ["美国队长", "蜘蛛侠"]
output = search_and_add(input_str, keyword_list, "<b>", "</b>")
print(output)
from operator import itemgetter
def search_and_add(input_str, str_list, prefix, suffix):
"""
輸入一段文字,用str_list的短語去搜索,如果命中的話,則在命中的短語前後添加prefix和suffix。
如search_and_add("abcdefg", ['b', 'd'], "<u>", "</u>") 則輸出為a<u>b</u>c<u>d</u>efg
:param input_str:
:param str_list:
:param prefix:
:param suffix:
:return:
"""
str_length_map = {s: len(s) for s in str_list}
sorted_tuple = sorted(str_length_map.items(), key=itemgetter(1), reverse=True)
target_list = [i[0] for i in sorted_tuple]
arr = []
_search_and_add(input_str, target_list, arr, prefix, suffix)
result = ""
for item in arr:
result += item
return result
def _search_and_add(input_str, str_list, arr, prefix, suffix):
"""
嵌套調用自身
:param input_str:
:param str_list:
:param arr:
:return:
"""
cut_result = cut_3(input_str, str_list, prefix, suffix)
if cut_result is None:
arr.append(input_str)
return
left = cut_result[0]
middle = cut_result[1]
right = cut_result[2]
if left != "":
_search_and_add(left, str_list, arr, prefix, suffix)
arr.append(middle)
if right != "":
_search_and_add(right, str_list, arr, prefix, suffix)
def cut_3(input_str, str_list, prefix, suffix):
"""
传入一个字符串,如果能被str_list中的某一个短语cut的话,则返回三段式,如果没有可以cut的短语,则返回None
:param input_str:
:param str_list:
:return:
"""
for target in str_list:
if target not in input_str:
continue
index = input_str.index(target)
if index == 0:
# 首命中
return ["", prefix + target + suffix, input_str[index + len(target):]];
elif (index + len(target)) == len(input_str):
# 尾命中
return [input_str[0:index], prefix + target + suffix, ""];
else:
# 中间命中
return [input_str[0:index], prefix + target + suffix, input_str[index + len(target):]];
return None
if __name__ == '__main__':
print(search_and_add("abcdefgabcdefg", ['abcdef','abcdefg'], "<u>", "</u>"))