productRankingOct12: [
"LessPopularityEPC"
"CtrEpcJob"
"DeviceSpecificLPE"
]
我有上面指定格式的数据。我想在方括号和&之间提取数据。将其存储到数组中。我使用过这段代码,但似乎无法正常工作
File.open(input_file, "r") do |f| #f=file descriptor
f.each_line do |line|
puts line.scan(/[([^<>]*)]/)
end
end
答案 0 :(得分:1)
让我们首先使用您示例中的内容创建一个文件:
text = <<BITTER_END
productRankingOct12: [
"LessPopularityEPC"
"CtrEpcJob"
"DeviceSpecificLPE"
]
BITTER_END
FName = "text"
IO.write(FName, text)
#=> 79
现在只需读取文件的行,并将那些不包含左边或右边括号的行追加到最初为空的数组中:
arr = IO.foreach(FName).with_object([]) { |line, a|
a << line unless line =~ /[\[\]]/ }
#=> ["\"LessPopularityEPC\"\n",
# "\"CtrEpcJob\"\n",
# "\"DeviceSpecificLPE\"\n"]
puts arr
# "LessPopularityEPC"
# "CtrEpcJob"
# "DeviceSpecificLPE"
答案 1 :(得分:0)
你的正则表达式似乎并不正确。尝试使用https://regex101.com/等在线工具检查您的正则表达式。
我认为这个正则表达式可能适合您的需求
\"([^";]*)\"
如果您查看https://regex101.com/r/qR4cQ3/1处的示例,我会在下面作出解释:
换句话说,匹配任何非谈话标记但在谈话标记之间的文字。
您还应该将所有文本读入一个字符串,然后对其进行扫描,以便获得所有内容的数组,而不仅仅是每行。