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

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表示文本末尾。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在你的问题中,你提到了两个JSON字符串,并且想要提取它们使用的正则表达式。 首先,关于第一个JSON字符串的正则表达式,你使用了下面的表达式来捕获第一部分:`CSRF令牌结束,同时也有望匹配,直到};`。 其次,关于第二个JSON字符串的正则表达式,你使用了下面的表达式来捕获第二部分:`Javascript的正则表达式匹配json的html`。 然而,你并没有提供具体的JSON字符串,所以我无法为你提供更准确的正则表达式正则表达式通常用于匹配特定的模式,以便提取所需的数据。具体的正则表达式取决于你需要提取的JSON字符串的结构和内容。 通常,使用正则表达式来解析JSON字符串并不是最佳的方法。JSON是一种具有结构的数据格式,有许多现成的库和工具可以更方便地解析和操作JSON数据。如果你在Chrome扩展中使用JavaScript,可以使用内置的JSON对象来解析JSON数据。例如,你可以使用`JSON.parse()`方法将一个JSON字符串转换为JavaScript对象,然后可以方便地访问和操作其中的数据。 综上所述,具体的JSON字符串可能需要特定的正则表达式来提取。如果你能提供更具体的JSON字符串和你想要提取的内容,我可以为你提供更准确的正则表达式。另外,你也可以考虑使用现有的JSON解析库或工具来更方便地解析和操作JSON数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Javascript的正则表达式匹配json的html](https://blog.csdn.net/weixin_33724428/article/details/117725798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [BeanShell(BeanShell PostProcessor),正则表达式,json,处理特殊响应数据获取特定值](https://blog.csdn.net/baidu_31295661/article/details/122176789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值