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

如何用Python正则表达式从多行字符串中捕获纯5位数字序列

问题:精准捕获命令输出中的纯5位数字序列

需要从两种命令输出中仅捕获纯5位数字组成的序列,排除长度不符的数字(比如4200000089)。原代码用re.search('(\d{5} )+',cmd_result,re.M)无法完整捕获目标内容,现提供正确实现方案。


命令输出示例

命令输出1:
Refresh Epoch 14
65041 65000 65062 65496 65489 65496 65489 4200000089
192.168.1.2 (via vrf office) from 10.254.233.3 (10.133.1.3)

命令输出2:
Refresh Epoch 14
65041 65000 65062 65496 65489 65480
192.168.1.2 (via vrf office) from 10.254.233.3 (10.133.1.3)

目标捕获内容

  • 命令输出1对应:65041 65000 65062 65496 65489 65496 65489
  • 命令输出2对应:65041 65000 65062 65496 65489 65480

现有代码问题

原代码仅能捕获部分5位数字序列,无法覆盖所有符合要求的内容:

import re
cmd_result = '''Refresh Epoch 14
  65041 65000 65062 65496 65489 65480
    192.168.1.2 (via vrf office) from 10.254.233.3 (10.133.1.3)'''

as_value = re.search('(\d{5} )+',cmd_result,re.M)
print(as_value)
# 输出:<re.Match object; span=(188, 224), match='65041 65000 65062 65496 65489 '>

解决方案

方法1:匹配所有独立5位数字后拼接

利用re.findall匹配所有符合条件的纯5位数字,再用空格拼接成目标字符串:

import re

cmd_result1 = '''Refresh Epoch 14
65041 65000 65062 65496 65489 65496 65489 4200000089
192.168.1.2 (via vrf office) from 10.254.233.3 (10.133.1.3)'''

cmd_result2 = '''Refresh Epoch 14
65041 65000 65062 65496 65489 65480
192.168.1.2 (via vrf office) from 10.254.233.3 (10.133.1.3)'''

# 匹配独立的5位数字(前后为非数字或字符串边界)
pattern = r'\b\d{5}\b'
matches1 = re.findall(pattern, cmd_result1)
matches2 = re.findall(pattern, cmd_result2)

result1 = ' '.join(matches1)
result2 = ' '.join(matches2)

print(result1)  # 输出:65041 65000 65062 65496 65489 65496 65489
print(result2)  # 输出:65041 65000 65062 65496 65489 65480

说明:\b是单词边界,确保匹配的是长度恰好为5的数字,不会匹配长数字中的子串(比如4200000089中的任意5位)。

方法2:定位数字行后过滤

先提取包含目标数字的行,再从中筛选5位数字,适合输出格式固定的场景:

import re

def extract_5digit_sequence(cmd_output):
    # 遍历所有行,定位由空格分隔数字的行(排除IP和Refresh行)
    for line in cmd_output.splitlines():
        line = line.strip()
        if line and all(c.isdigit() or c.isspace() for c in line) and '.' not in line:
            # 拆分数字并筛选长度为5的项
            digits = [num for num in line.split() if len(num) == 5]
            return ' '.join(digits)
    return ''

result1 = extract_5digit_sequence(cmd_result1)
result2 = extract_5digit_sequence(cmd_result2)

print(result1)
print(result2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:21:48