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

如何用Ruby结合正则验证文本文件每行是否符合指定格式?

Ruby验证文本文件格式方案

没问题,我来帮你搞定这个需求!下面是实现步骤和完整代码:

1. 匹配格式的正则表达式

首先我们需要精准匹配你要的格式,对应的正则表达式是:

VALID_LINE_PATTERN = /^\d+,S1-\d+,S2-\d+,S3-\d+,S4-\d+$/

解释一下这个正则的各个部分:

  • ^:锚定行的开头,确保没有多余前缀
  • \d+:匹配一个或多个数字(对应开头的整数)
  • ,S1-\d+:匹配逗号后紧跟S1-加数字的格式,后面的S2/S3/S4同理
  • $:锚定行的结尾,确保没有多余后缀

2. 完整Ruby代码实现

这段代码会逐行读取文件,验证每行格式,不匹配就抛出指定错误:

VALID_LINE_PATTERN = /^\d+,S1-\d+,S2-\d+,S3-\d+,S4-\d+$/

def validate_file_format(file_path)
  File.foreach(file_path).with_index(1) do |line, line_num|
    stripped_line = line.strip
    # 跳过空行(如果需要允许空行,就注释掉下面这行)
    raise "文件输入格式不匹配(第#{line_num}行是空行)" if stripped_line.empty?
    
    unless stripped_line.match?(VALID_LINE_PATTERN)
      raise "文件输入格式不匹配(第#{line_num}行:#{stripped_line})"
    end
  end
  puts "所有行格式验证通过!"
rescue Errno::ENOENT
  raise "错误:找不到文件 #{file_path}"
rescue => e
  puts e.message
  exit 1
end

# 使用示例:替换成你的文件路径
validate_file_format("your_input_file.txt")

3. 代码说明

  • File.foreach(file_path).with_index(1):逐行读取文件,同时记录行号(从1开始,方便快速定位错误行)
  • line.strip:去掉每行前后的空白字符(比如换行符、空格),避免因为这些无关字符干扰匹配结果
  • 额外处理了空行的情况(如果你的业务场景允许空行,可以删掉对应的判断逻辑)
  • 捕获了文件不存在的异常,同时统一处理所有错误并输出清晰提示

4. 测试示例

假设你的文件内容如下:

1,S1-88,S2-53,S3-69,S4-64
2,S1-100,S2-75,S3-90,S4-80
3,S1-abc,S2-50,S3-60,S4-70  # 这行会触发错误

运行代码后,会输出:文件输入格式不匹配(第3行:3,S1-abc,S2-50,S3-60,S4-70)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:27:45