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

如何用Python正则表达式匹配subprocess获取的SVN列表字符串?

Python正则匹配SVN目录列表的实现方案

首先咱们得先把subprocess拿到的输出处理成方便操作的格式,毕竟原始输出是一串带换行的字符串。先看基础的处理代码:

import os, subprocess
import re

# 执行SVN命令获取输出
args = "svn ls https://svne1.access.nsn.com/isource/svnroot/scm_fp/trunk"
pi = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout, stderr = pi.communicate()

# 处理输出:Python3需要先解码字节串为字符串,然后分割成行,过滤空行
# Python2直接用stdout.splitlines()就行
svn_items = [line.strip() for line in stdout.decode('utf-8').splitlines() if line.strip()]

接下来根据你可能的需求,提供几种常用的正则匹配方案:

1. 基础匹配与版本号提取

如果只是要确认每个条目符合R_FPT_xxx/的格式,或者想把版本号单独提取出来,可以用这两个正则:

# 匹配完整的目录条目(包含末尾的斜杠)
full_item_pattern = re.compile(r'^R_FPT_\S+/')
# 提取版本号部分(去掉前缀R_FPT_和末尾的斜杠)
version_extract_pattern = re.compile(r'^R_FPT_(\S+)/')

matched_entries = []
extracted_versions = []
for item in svn_items:
    # 先校验条目格式
    if full_item_pattern.match(item):
        matched_entries.append(item)
        # 再提取版本号
        version_match = version_extract_pattern.match(item)
        if version_match:
            extracted_versions.append(version_match.group(1))

print("匹配到的完整条目:", matched_entries)
print("提取出的版本号:", extracted_versions)

2. 精准匹配特定格式的版本

如果你需要筛选特定规则的版本(比如只找190开头的,或者严格的多段数字版本),可以针对性写正则:

示例1:筛选以190开头的版本

# 匹配R_FPT_190.xxx/格式的条目
v190_pattern = re.compile(r'^R_FPT_190\.\S+/')
v190_entries = [item for item in svn_items if v190_pattern.match(item)]
print("190开头的版本条目:", v190_entries)

示例2:筛选多段数字组成的版本(比如x.x.x.x这种结构)

# 匹配由数字和点组成的版本格式
multi_segment_pattern = re.compile(r'^R_FPT_(\d+\.)+\d+/')
multi_segment_entries = [item for item in svn_items if multi_segment_pattern.match(item)]
print("多段数字版本的条目:", multi_segment_entries)

3. 批量提取所有匹配内容

如果不想先分割成行,也可以直接对整个输出字符串做匹配,一次性拿到所有结果:

stdout_str = stdout.decode('utf-8')
# 一次性提取所有版本号
all_versions = re.findall(r'R_FPT_(\S+)/', stdout_str)
print("一次性提取的所有版本号:", all_versions)

小提示

  • Python2环境下不需要decode('utf-8'),直接用stdout字符串就行。
  • 如果版本号里只会有数字和点,把正则里的\S换成[\d.]+会更严谨,避免匹配到意外字符。
  • 如果需要更严格的版本校验(比如固定3段或4段数字),可以把正则改成^R_FPT_\d+\.\d+\.\d+/这类更具体的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:25:39