如何提取字符串中特定标记后的内容?从AWS Lex报文中取value字段值
可行实现方案
方案1:JSON解析(优先推荐)
你获取的报文本身是被外层单引号包裹、内部做了转义的合法JSON结构,直接用JSON解析是稳定性最高的方案,不会因为value字段包含特殊字符出现匹配错误。
处理逻辑通用所有开发语言:
- 先移除原始报文首尾的单引号,拿到标准JSON字符串
- 对JSON字符串做反序列化,遍历
messages数组直接读取每个元素的value字段即可
Python代码示例:
import json # 原始返回报文 raw_response = '\'{"messages":[{"type":"PlainText","group":1,"value":"Great!"},{"type":"PlainText","group":2,"value":"Please click here."}]}\'' # 移除首尾单引号 json_content = raw_response.strip("'") # 反序列化 lex_data = json.loads(json_content) # 提取所有value result = [item["value"] for item in lex_data["messages"]] # 得到结果:['Great!', 'Please click here.']
方案2:正则提取
如果确实需要用正则实现,你之前匹配失败大概率是没有正确处理转义字符、也没有使用捕获组提取目标内容,可使用带非贪婪匹配的正则表达式:"value\\":\\"(.*?)\\"},直接取第一个捕获组的结果即可。
Python正则示例:
import re raw_response = '\'{"messages":[{"type":"PlainText","group":1,"value":"Great!"},{"type":"PlainText","group":2,"value":"Please click here."}]}\'' match_pattern = r'"value\\":\\"(.*?)\\"}' result = re.findall(match_pattern, raw_response) # 得到结果:['Great!', 'Please click here.']
注意:正则方案仅适用于value内容中不会出现
\"}组合的场景,若value本身包含转义引号加右大括号的内容会出现匹配偏差,优先使用JSON解析方案。
内容的提问来源于stack exchange,提问作者DJ22T
相关产品推荐
相关产品推荐

