如何在ruby中的括号之间提取数据?

时间:2015-11-13 03:21:36

标签: arrays ruby

 productRankingOct12: [
"LessPopularityEPC"
"CtrEpcJob"
"DeviceSpecificLPE"
 ]

我有上面指定格式的数据。我想在方括号和&之间提取数据。将其存储到数组中。我使用过这段代码,但似乎无法正常工作

            File.open(input_file, "r") do |f| #f=file descriptor
                f.each_line do |line| 
                puts line.scan(/[([^<>]*)]/)
                end
            end 

2 个答案:

答案 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处的示例,我会在下面作出解释:

  • \“匹配字符”字面意思
  • 在第一个捕获组([^“;] *)
    • [^“;] *在零和无限次之间匹配一个不是说话标记的字符,尽可能多次,根据需要回馈(贪婪)
  • \“匹配字符”字面意思

换句话说,匹配任何非谈话标记但在谈话标记之间的文字。

您还应该将所有文本读入一个字符串,然后对其进行扫描,以便获得所有内容的数组,而不仅仅是每行。