正则表达式提取两行虚线间表头失败问题排查
正则匹配失败的原因及解决方法
问题根源
你的正则匹配失败核心有两个问题:
- 没匹配分隔线前的空白字符:原文本里每一行开头都有大量空格,你写的
--+直接匹配短横线开头的行,但实际分隔线带前置空格,正则找不到对应模式。 - 换行处理不明确:你在正则里直接换行书写,但原始字符串中的换行需要用
\n明确匹配,且只有先匹配到正确的分隔线,后续的表头捕获才会生效。
修正后的正则及代码
调整正则,覆盖分隔线前后的空白字符,明确处理换行:
import re cli_output = """ ------------------------------------------------------------------------------------------ PortNo Descr Status Speed Mode Pause FlowCtrl ------------------------------------------------------------------------------------------ 1 A UP 200G FULL NO YES """ header = re.search(r'\s*--+\n(.*?)\n\s*--+', cli_output).group(1).strip() print(header)
输出结果:
PortNo Descr Status Speed Mode Pause FlowCtrl
正则解释
\s*:匹配分隔线开头的任意空白字符(空格、制表符都能覆盖)--+:匹配至少一个短横线组成的分隔线\n:明确匹配换行符,对应文本中的行分隔(.*?):非贪婪捕获表头行内容,避免意外匹配多余字符.strip():去掉表头行前后的冗余空格,得到整洁的表头文本
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

