如何通过正则匹配提取window.dataLayer字符串元素值并存入Python列表?
使用正则匹配提取键值对并存入Python列表
嘿,这个需求用正则来实现其实挺直接的,我给你拆解一下步骤和代码:
首先我们可以借助Python的re模块,写个精准匹配双引号包裹的键值对的正则,再把结果格式化成你要的样式存入列表。
完整实现代码
import re # 你的目标字符串变量 data_str = 'window.dataLayer=[{"articleCondition":"New","categoryNr":"12345","sellerCustomerNr":"88888888","articleStatus":"Open"}]' # 正则表达式:捕获双引号里的键和对应的值 pattern = r'"(\w+)":"([^"]+)"' # 提取所有匹配的键值对 matches = re.findall(pattern, data_str) # 格式化成你需要的样式并存入列表 result_list = [] for key, value in matches: # 把值转成小写(数字转小写不影响,字符串按你的要求统一转小写) formatted_item = f"{key} = '{value.lower()}'" result_list.append(formatted_item) # 查看结果 print(result_list)
代码细节解释
- 正则表达式
r'"(\w+)":"([^"]+)"':(\w+):专门捕获键名,匹配字母、数字和下划线,完美适配你的键名格式;":":精准匹配键和值之间的冒号+双引号分隔符;([^"]+):捕获值的内容,[^"]表示匹配除双引号外的所有字符,确保完整拿到值的内容。
re.findall(pattern, data_str):会返回一个元组列表,每个元组对应一组匹配到的键值对,比如[('articleCondition', 'New'), ('categoryNr', '12345'), ...];- 格式化处理:遍历每个键值对,把值转成小写(符合你例子里
'New'变'new'的要求),拼接成指定字符串格式后加入结果列表。
运行代码后,你得到的result_list就是:
["articleCondition = 'new'", "categoryNr = '12345'", "sellerCustomerNr = '88888888'", "articleStatus = 'open'"]
要是之后遇到值里包含转义双引号(比如"value:\"test\"")的场景,只需要把正则调整为r'"(\w+)":"(.*?)(?<!\\)"'就能兼容,不过当前你的输入用第一个正则就完全够用啦。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

