如何提取特定字符串内的内容?以MatchesBlock中的JSON为例
提取MatchesBlock内部内容及JSON数据的方案
嘿,这个需求很常见!要从你给出的字符串里提取MatchesBlock的内部内容,尤其是那串嵌套的JSON数据,咱们可以用正则表达式配合编程语言来轻松搞定,下面给你分场景的具体实现:
一、用Python提取(适合后端/脚本处理)
首先咱们先分析字符串结构:MatchesBlock的参数是三个,前两个是单引号包裹的字符串,第三个就是咱们要的JSON对象。我们可以用正则精准捕获目标内容,再解析JSON。
代码示例
import re import json # 你的目标字符串 test_str = "var block = new MatchesBlock('page_competition_1_block_competition_matches_summary_5', 'block_competition_matches_summary', {\"page\":0,\"bookmaker_urls\":{\"13\":[{\"link\":\"http:\\/\\/www.bet365.com\\/home\\/?affiliate=365_178981\",\"name\":\"Bet 365\"}]},\"block_service_id\":\"competition_summary_block_competitionmatchessummary\",\"round_id\":42011,\"outgroup\":false,\"view\":2,\"competition_id\":13});" # 1. 提取MatchesBlock的全部内部参数 block_content_pattern = r"new MatchesBlock\((.*?)\);" block_content = re.search(block_content_pattern, test_str, re.DOTALL).group(1) print("✅ MatchesBlock内部完整内容:") print(block_content) # 2. 精准提取第三个参数的JSON数据 json_pattern = r"new MatchesBlock\('[^']+', '[^']+', (.*?)\);" raw_json_str = re.search(json_pattern, test_str, re.DOTALL).group(1) # 处理JSON里的转义斜杠(原字符串里的\\/需要换成/才能被正确解析) clean_json_str = raw_json_str.replace('\\/', '/') # 解析成Python字典 parsed_json = json.loads(clean_json_str) print("\n✅ 解析后的JSON数据:") print(parsed_json)
关键说明
re.DOTALL:让正则里的.可以匹配换行符(虽然你的字符串是单行,但加上更稳妥,兼容多行场景)- 替换
\\/为/:原字符串里的URL斜杠被转义了,必须处理后才能被json.loads正确解析
二、用JavaScript提取(适合浏览器控制台/前端场景)
如果是在浏览器里处理这段字符串,比如从页面源码中提取,咱们可以用类似的正则思路,配合JSON.parse来解析:
代码示例
// 目标字符串 const testStr = "var block = new MatchesBlock('page_competition_1_block_competition_matches_summary_5', 'block_competition_matches_summary', {\"page\":0,\"bookmaker_urls\":{\"13\":[{\"link\":\"http:\\/\\/www.bet365.com\\/home\\/?affiliate=365_178981\",\"name\":\"Bet 365\"}]},\"block_service_id\":\"competition_summary_block_competitionmatchessummary\",\"round_id\":42011,\"outgroup\":false,\"view\":2,\"competition_id\":13});"; // 提取JSON部分 const jsonMatch = testStr.match(/new MatchesBlock\('[^']+', '[^']+', (.*?)\);/s)[1]; // 处理转义斜杠并解析JSON const parsedJson = JSON.parse(jsonMatch.replace(/\\\//g, '/')); console.log("✅ 解析后的JSON数据:", parsedJson);
关键说明
- 正则的
s修饰符:和Python的re.DOTALL作用一致,确保.能匹配换行 replace(/\\\//g, '/'):全局替换转义斜杠,避免JSON解析报错
三、注意事项
如果你的字符串里的参数存在单引号嵌套(比如前两个单引号参数里包含单引号),那上面的正则会失效,这种情况下建议用专门的JavaScript语法解析器(比如acorn)来处理,不过绝大多数场景下,上面的正则方案已经足够好用了。
内容的提问来源于stack exchange,提问作者fantaghiro
相关产品推荐
相关产品推荐

