我有一个包含这样的部分的文件,
flags...id, description, used, color
AB, "Abandoned", 0, 13168840
DM, "Demolished", 0, 15780518
OP, "Operational", 0, 15780518...
其中...
表示一系列控制字符,例如ETX和STX。我试图从文件中抓取多行。
我使用以下代码:
f = File.open(somePath)
r = f.grep(/flags.+id, description, used, color(?<data>(?:.|\s)*?)[\x00-\x08]/)
此代码不起作用。我不懂为什么。 grep的文档似乎暗示该文件是逐行解析的。我觉得这可能是正则表达式没有返回任何结果的原因。
file.each_line
捕获数据会更好吗?答案 0 :(得分:1)
String#scan
来救援:
File.read('/path/to/file').scan(
/flags.+id, description, used, color(?<data>(?:.|\s)*?)[\x00-\x08]/m
)
答案 1 :(得分:0)
答案 2 :(得分:0)
我是否认为grep使用逐行解析?
是。试试你的文件:
r = File.open(somePath) do |f|
f.grep(/[A-Z]{2},/)
end
puts r
# => AB, "Abandoned", 0, 13168840
# DM, "Demolished", 0, 15780518
# OP, "Operational", 0, 15780518
puts r.inspect
# => ["AB, \"Abandoned\", 0, 13168840\n", "DM, \"Demolished\", 0, 15780518\n", "OP, \"Operational\", 0, 15780518\n"]
这就是我的正则表达不按预期工作的原因吗?
不仅如此。你在寻找什么,[\ x00- \ x08]? ascii或十六进制字符?
使用file.each_line捕获数据会更好吗?
File#grep
听起来不错。