You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改正则表达式以提取字典中排除SN和MAC标识的注释内容?

解决方案:移除SN和MAC相关内容提取目标文本

我来帮你搞定这个需求,不管是调整正则表达式,还是用更直观的非正则方法,都能实现你要的效果,具体看哪种更适合你的场景:

一、修改正则表达式的两种思路

1. 精准提取最后一行(如果目标内容总是在末尾)

你的原正则会匹配第一个换行后的所有内容,我们可以调整成只匹配最后一行的内容,这样不管中间有没有MAC那行,都能直接拿到目标日期文本:

import re

test1 = {"SN": "SN: abc123\r\nMAC: 10:ab:cd:30:5C:7C\r\n01-04-2022 Замena"}
name_match_3 = re.search(r"\r\n([^\r\n]+)$", test1.get("SN"))
dict_miner_regular = {"Comment": name_match_3.group(1) if name_match_3 else None}

这里的正则\r\n([^\r\n]+)$解释:

  • \r\n匹配换行符,定位到行的开头
  • ([^\r\n]+)捕获除换行外的所有字符(也就是整行内容)
  • $匹配字符串结尾,确保只拿到最后一行

2. 替换掉所有SN/MAC开头的行(更灵活)

如果目标内容不一定在最后,只是要移除所有和SN、MAC相关的行,可以用re.sub来批量替换掉这些行,剩下的就是你要的内容:

import re

test1 = {"SN": "SN: abc123\r\nMAC: 10:ab:cd:30:5C:7C\r\n01-04-2022 Замena"}
cleaned_comment = re.sub(r"^(SN:|MAC:).*\r?\n", "", test1.get("SN"), flags=re.MULTILINE).strip()
dict_miner_regular = {"Comment": cleaned_comment if cleaned_comment else None}
  • ^(SN:|MAC:).*\r?\n:匹配以SN:或MAC:开头的整行(包括换行符)
  • re.MULTILINE:让^匹配每行的开头,而不是整个字符串的开头
  • .strip():处理替换后可能残留的首尾空白

二、非正则的替代方法(更直观)

如果觉得正则不好理解,也可以用字符串分割+过滤的方式,可读性更强:

test1 = {"SN": "SN: abc123\r\nMAC: 10:ab:cd:30:5C:7C\r\n01-04-2022 Замena"}
# 按行分割字符串
lines = test1.get("SN").splitlines()
# 过滤掉以SN:或MAC:开头的行
filtered_lines = [line for line in lines if not line.startswith(("SN:", "MAC:"))]
# 拼接成最终的注释内容
cleaned_comment = "\n".join(filtered_lines).strip()
dict_miner_regular = {"Comment": cleaned_comment if cleaned_comment else None}

这种方法逻辑清晰,就算以后字符串结构有小变化,也容易调整过滤条件。

内容的提问来源于stack exchange,提问作者Alexey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:38:12