ToB企服应用市场:ToB评测及商务社交产业平台

标题: 正则表达式-将一段话隔开为两个list,此中一个为标签list,一个为文本list [打印本页]

作者: 梦见你的名字    时间: 2024-7-31 22:22
标题: 正则表达式-将一段话隔开为两个list,此中一个为标签list,一个为文本list
  1. import re
  2. def extract_labels_and_contents(text):
  3.     # 构建正则表达式模式
  4.     pattern = re.compile(r'(\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\])(.*?)(?=\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\]|\Z)', re.DOTALL)
  5.     # 查找所有匹配的标签和内容
  6.     matches = pattern.findall(text)
  7.     # 将标签和中间内容分别存储在两个列表中
  8.     found_labels = []
  9.     contents = []
  10.     for match in matches:
  11.         found_labels.append(match[0])
  12.         contents.append(match[1].strip())
  13. #     print("Found Labels:", found_labels)
  14. #     print("Contents:", contents)
  15.     combined_list = [{"text": text, "speaker": "sys", "strategy": label} for label, text in zip(found_labels, contents)]
  16.    
  17.     return combined_list
  18. # 示例文本
  19. text = """
  20. [SUP]您好,给您一个温暖的抱抱。[ANA]您这样是对的。
  21. """
  22. # 调用函数并打印结果
  23. result = extract_labels_and_contents(text)
  24. print(result)
复制代码
重点在于正则表达式
  1. pattern = re.compile(r'(\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\])(.*?)(?=\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\]|\Z)', re.DOTALL)
复制代码

 
在这个改进的正则表达式 (\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\])(.*?)(?=\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\]|\Z) 中:

这种方式可以确保匹配所有标签及其对应的内容。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4