如何根据命令行正则参数终止序列输出?附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
相关产品推荐
相关产品推荐

