Python正则:匹配特定字符串前后内容并提取值存入字典
正则提取与字典存储方案
直接针对你的需求写精准正则,就能提取目标内容并存入字典:
分步提取代码
import re target_str = "Code:<em>1</em>,Some text some other text {fdf: more text, <strong>attr</strong>=<em>important</em> " # 提取第一个<em>里的数值 code_num = re.findall(r'<em>(\d+)</em>', target_str)[0] # 匹配<strong>attr</strong>关联的<em>内容 attr_content = re.findall(r'<strong>attr</strong>=<em>(.*?)</em>', target_str)[0] # 转成字典 result_dict = {"code": code_num, "important_attr": attr_content} print(result_dict) # 输出 {'code': '1', 'important_attr': 'important'}
一次性匹配方案
如果想一步到位,用带re.DOTALL的正则适配可能存在换行的通用场景:
matches = re.findall(r'Code:<em>(\d+)</em>.*?<strong>attr</strong>=<em>(.*?)</em>', target_str, re.DOTALL) result_dict = {"code": matches[0][0], "important_attr": matches[0][1]}
你之前的正则问题在哪?
你用的(?<=testcaseid_)[^_]+_[^_]+和当前需求完全不搭——这个正则是用来抓取testcaseid_后面两段下划线分隔的内容,和你要提取的<em>标签、<strong>attr</strong>关联内容毫无关系,自然会抓到无关内容。
关键提醒
- 用
.*?非贪婪匹配,防止匹配到超出目标标签的多余内容 - 必须通过前置的
Code:、<strong>attr</strong>这类特征锁定目标<em>,避免误抓其他<em>标签的内容
内容的提问来源于stack exchange,提问作者user1619176
相关产品推荐
相关产品推荐

