正则表达式-将一段话隔开为两个list,其中一个为标签list,一个为文本list,然后组成json

avatar
作者
筋斗云
阅读量:0
import re  def extract_labels_and_contents(text):     # 构建正则表达式模式     pattern = re.compile(r'(\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\])(.*?)(?=\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\]|\Z)', re.DOTALL)       # 查找所有匹配的标签和内容     matches = pattern.findall(text)      # 将标签和中间内容分别存储在两个列表中     found_labels = []     contents = []      for match in matches:         found_labels.append(match[0])         contents.append(match[1].strip())  #     print("Found Labels:", found_labels) #     print("Contents:", contents)     combined_list = [{"text": text, "speaker": "sys", "strategy": label} for label, text in zip(found_labels, contents)]          return combined_list  # 示例文本 text = """ [SUP]您好,给您一个温暖的抱抱。[ANA]您这样是对的。 """  # 调用函数并打印结果 result = extract_labels_and_contents(text) print(result)

重点在于正则表达式

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) 中:

  • (\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\]) 匹配标签。
  • (.*?) 非贪婪地匹配标签后的内容。
  • (?=\[FAC\]|\[ADV\]|\[SUP\]|\[RES\]|\[ANA\]|\[EXP\]|\Z) 确保匹配到下一个标签开始的位置或文本末尾,\Z表示文本末尾。

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!