Python正则匹配循环执行时如何提取输出中指定位置的特定值
问题说明
现有基于Python re模块实现正则提取的循环代码如下:
for i in range(0,len(new)): m = re.search(r"core-\b(\d+)", new[i]) if (m): m_1 = (m.group(1)) #print(m_1)
已知代码跑完四次迭代时,所有命中正则的提取结果按顺序为01、01、02、02,需要实现仅输出序列中第二个位置的01值。
实现方案
核心思路是给命中的目标结果加计数器,计数到第二个目标值时直接输出并终止循环即可,不需要跑完所有迭代,处理大体积列表时性能更好。
对应修改后代码
import re # 配置参数:要取第2个值为01的匹配结果 hit_count = 0 target_pos = 2 target_value = "01" for content in new: match_res = re.search(r"core-(\d+)", content) if match_res: extract_val = match_res.group(1) # 命中目标值才累加计数 if extract_val == target_value: hit_count += 1 # 计数到目标位置时输出结果,直接终止循环 if hit_count == target_pos: print(extract_val) break
补充说明
- 原代码里的正则
core-\b(\d+)存在冗余:\b代表单词边界,-本身属于非单词字符,后面跟数字的位置本身就是天然单词边界,这里加\b不影响结果但属于无效写法,直接删除即可。 - 原代码用
range(len(new))按索引遍历列表的写法没必要,直接遍历列表元素本身代码更简洁。 - 如果你的需求是直接取所有匹配结果里的第二个元素,不校验值是否为01,可以去掉值判断逻辑,简化为以下写法:
import re hit_count = 0 for content in new: match_res = re.search(r"core-(\d+)", content) if match_res: hit_count += 1 if hit_count == 2: print(match_res.group(1)) break
内容的提问来源于stack exchange,提问作者Kierra Howard
相关产品推荐
相关产品推荐

