def get_all_tags_or_friends(i_special_char_str: str) -> list:
ret_tag_tuple_list_list = []
# ret_tag_tuple_list_list: [("#tag1", [id1, id2, ___]), ("#tag2", [id1, id3, ___]), ___]
db_connection = DbHelperM.get_db_connection()
db_cursor = db_connection.cursor()
db_cursor_result = db_cursor.execute(
"SELECT * FROM " + DbSchemaM.DiaryEntryTable.name
+ " WHERE " + DbSchemaM.DiaryEntryTable.Cols.diary_entry
+ " LIKE " + '"%' + i_special_char_str + '%"'
)
# -http://sqlite.org/lang_expr.html#like
diary_db_te_list = db_cursor_result.fetchall()
for diary_db_te in diary_db_te_list:
diary_entry = DiaryEntryM(*diary_db_te)
string_with_hashtag_str = diary_entry.diary_text
t_diary_id_int = diary_entry.id
regexp_pattern_obj = re.compile("\\" + i_special_char_str + r"\w+")
# Please note: we need to escape the caret ("^") character becase this is a
# special character ("literal")
regexp_search_result_list = regexp_pattern_obj.findall(string_with_hashtag_str)
# https://docs.python.org/3/library/re.html
for t_re_tag_str in regexp_search_result_list:
# -regexp_search_result_list: ["#tag1", "#tag2", ___]
flag_boolean = False
for (t_ret_tag_str, t_ret_diary_id_list) in ret_tag_tuple_list_list:
if t_re_tag_str == t_ret_tag_str:
t_ret_diary_id_list.append(t_diary_id_int)
flag_boolean = True
break
if flag_boolean:
break
else:
ret_tag_tuple_list_list.append((t_re_tag_str, [t_diary_id_int]))
db_connection.commit()
# TODO: Removing duplicates
return ret_tag_tuple_list_list
评论列表
文章目录