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

如何根据命令行正则参数终止序列输出?附Python代码求助

完善Python代码:匹配正则规则后终止标准输入输出

需求说明:
执行命令 seq 100 1000 | python3 filename '/1{3}/q',实现以下功能:

  • 输出100到1000的序列
  • 遇到数字1连续出现3次的行(即111)时,立即停止输出并退出脚本

用户现有代码片段:

import sys
import re

slippy_command = sys.argv[1]

line_number = 0
while True:
    line = sys.stdin.readline()
    line_number += 1
    if line == '':
        break
    print(line, end = '')

 if slippy_command[-3:] == "}/q":

完善后的代码

import sys
import re

def main():
    # 检查是否传入命令参数
    if len(sys.argv) < 2:
        sys.exit(1)
    
    slippy_command = sys.argv[1]
    # 处理带/q终止标记的命令
    if slippy_command.endswith('/q'):
        # 提取正则表达式部分(移除首尾的/和末尾的q)
        pattern_str = slippy_command.strip('/').rstrip('q')
        try:
            # 编译正则,确保语法有效
            pattern = re.compile(pattern_str)
        except re.error:
            sys.exit(1)
        
        # 逐行读取标准输入
        for line in sys.stdin:
            # 去除换行符,避免匹配时包含换行
            cleaned_line = line.strip('\n')
            print(cleaned_line)
            # 检查整行是否完全匹配正则
            if pattern.fullmatch(cleaned_line):
                # 匹配到目标行,立即终止程序
                sys.exit(0)
    else:
        # 无/q标记时,正常输出所有内容
        for line in sys.stdin:
            print(line, end='')

if __name__ == "__main__":
    main()

关键实现细节

  • 参数解析:识别/q终止标记,提取中间的正则表达式(如/1{3}/q提取为1{3})
  • 正则校验:预编译正则表达式,处理语法错误的情况,避免运行时崩溃
  • 输入处理:用for line in sys.stdin替代while readline,更符合Python迭代习惯,代码更简洁
  • 匹配终止逻辑:使用fullmatch确保整行内容完全符合正则规则(避免部分匹配误触发),匹配成功后直接调用sys.exit(0)终止程序
  • 兼容性处理:保留无/q标记时的正常输出逻辑,提升脚本灵活性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:57:50