import xml.etree.ElementTree as ET import html import re def format_quote_message(xml_content): """ 格式化引用消息 Args: xml_content: XML格式的消息内容 Returns: 格式化后的消息文本 """ try: xml_content = xml_content.replace('<', '<').replace('>', '>') # 使用正则表达式直接提取关键信息,避免XML解析问题 title_match = re.search(r'(.*?)', xml_content) main_content = title_match.group(1) if title_match else "[无标题]" # 提取引用消息的发送者和内容 display_name_match = re.search(r'(.*?)', xml_content) display_name = display_name_match.group(1) if display_name_match else "未知用户" quoted_content_match = re.search(r'.*?(.*?)', xml_content, re.DOTALL) quoted_content = quoted_content_match.group(1) if quoted_content_match else "" # 解码HTML实体 try: quoted_content = html.unescape(quoted_content) except: pass # 如果解码失败,使用原始内容 # 构建格式化的引用消息 if display_name and quoted_content: formatted_message = f"{main_content}\n引用 {display_name}:{quoted_content}" return formatted_message return main_content except Exception as e: # 如果解析失败,尝试提取title标签内容 try: match = re.search(r'(.*?)', xml_content) if match: return match.group(1) except: pass return f"[引用消息]" # 返回一个简单的标识,而不是错误信息 if __name__ == '__main__': strs =""" 那也没事,都是富二代,都是送出国镀个金回家继承家业的 57 0 0 0 0 1 2568355911763278189 45317011307@chatroom wxid_twrbhdxddlud12 水牛🐃 都是富二代。 <msgsource> <sec_msg_node> <alnode> <fr>1</fr> </alnode> </sec_msg_node> <pua>1</pua> <silence>1</silence> <membercount>125</membercount> <signature>N0_V1_DaX/Y3s2|v1_PvH3m56P</signature> <tmp_node> <publisher-id></publisher-id> </tmp_node> </msgsource> 1743491847 maoyijie 0 1 """ sss = format_quote_message(strs) print(sss)