跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何使用正则表达式提取首尾定界符之间的内容(不包含定界符)

本文介绍如何用 Python 的 re.findall 配合捕获组,精准提取被相同子串(如 __)包围的中间内容,避免返回冗余的边界字符。 本文介绍如何用 python 的 `re.findall` 配合捕获组,精准提取被相同子串(如 `__`)包围的中间内容,避免返回冗余的边界字符。 在字符串处理中,常需提取被特定分隔符(如双下划线 __、方括号 []、引号 "" 等)包裹的内部内容。若直接使用非贪婪匹配 __.*?__,re.findall 会返回 整个匹配项 (含边界),例如 ['__W500__'];而实际需求往往是仅获取中间部分——即 W500。 解决方法是使用 捕获组 (...) :将目标内容用圆括号括起,re.findall 会自动返回捕获组中的内容(而非整个匹配),前提是模式中 至少存在一个捕获组 。 ✅ 正确写法:
import re text = "/image/123.__W500__.png" matches = re.findall(r'__(.*?)__', text) # 注意:(.*?) 是捕获组 print(matches) # 输出: ['W500']
? 关键说明: perl正则表达式学习手册pdf版 perl正则表达式学习手册pdf版,点击下载解压即可。想学习perl正则的朋友需要看。 下载 r'__(.*?)__' 中,__ 是字面量边界,(.*?) 是非贪婪捕获组,匹配任意字符(除换行符)零次或多次; re.findall 检测到捕获组后, 只返回组内匹配内容 ,自动忽略外围 __; 若需匹配多个独立段落(如 "__A__ and __B__"),该模式仍能正确返回 ['A', 'B']; 使用原始字符串 r'' 可避免反斜杠转义问题,推荐作为正则书写惯例。 ⚠️ 注意事项: 若正则中无捕获组(如 re.findall('__.*?__', text)),结果将包含边界; 若需匹配嵌套结构(如 __a__b__ 中的 a__b),标准正则不适用,应改用 re.finditer 手动解析或专用解析器; 对大小写敏感场景,可添加标志 re.IGNORECASE,例如 re.findall(r'__(.*?)__', text, re.IGNORECASE)。 总结:掌握捕获组是精准提取定界内容的核心技巧——只需把想保留的部分放进 ( ),re.findall 就会为你“去壳取肉”。

相关文章