- 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表现文本末尾。
这种方式可以确保匹配所有标签及其对应的内容。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |