Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在ruby中提取括号之间的数据?_Arrays_Ruby - Fatal编程技术网

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

Arrays 如何在ruby中提取括号之间的数据?,arrays,ruby,Arrays,Ruby,我有上面指定格式的数据。我想提取方括号中的数据并将其存储到数组中。我使用过这个代码,但它似乎不起作用 productRankingOct12: [ "LessPopularityEPC" "CtrEpcJob" "DeviceSpecificLPE" ] File.open(输入_文件,“r”)do | f |#f=文件描述符 f、 每行 放置行。扫描(/[([^]*)]/) 结束 结束 您的正则表达式似乎不对。试着使用一个在线工具来检查你的正则表达式 我想这个正则表达式可能适合你的需要

我有上面指定格式的数据。我想提取方括号中的数据并将其存储到数组中。我使用过这个代码,但它似乎不起作用

 productRankingOct12: [
"LessPopularityEPC"
"CtrEpcJob"
"DeviceSpecificLPE"
 ]
File.open(输入_文件,“r”)do | f |#f=文件描述符
f、 每行
放置行。扫描(/[([^]*)]/)
结束
结束

您的正则表达式似乎不对。试着使用一个在线工具来检查你的正则表达式

我想这个正则表达式可能适合你的需要

            File.open(input_file, "r") do |f| #f=file descriptor
                f.each_line do |line| 
                puts line.scan(/[([^<>]*)]/)
                end
            end 
如果你看一看这个例子,它有一个解释,我在下面解释:

  • \按字面意思“匹配角色”
  • 在第一个捕获组中([^”]*)
    • [^”]*在零次和无限次之间,尽可能多地匹配一个非对话标记的字符,并根据需要进行回馈(贪婪)
  • \按字面意思“匹配角色”
换句话说,匹配任何不是有声标记但位于有声标记之间的文本


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

让我们首先创建一个包含示例中内容的文件:

\"([^";]*)\"

text=这是确切的格式吗?这些字符串之间没有逗号?为什么不更改文件?你离YAML不远Hiii我已经从数据中删除了逗号,因为我不需要这些。。。谢谢你的回答。它对我有用。。你能告诉我,如果我想把所有的值放在同一个索引上,那么我该怎么做?另外,我想把这个值映射到productRanking12..Chints,对不起,但我不知道你所说的“…把所有的值放在同一个索引上[什么索引?]”或者“…把这个[什么是“这个”?]值映射到productRanking12[productRanking12是什么类型的对象,一个数组,一个散列?]”是什么意思。如果你能澄清,我会尽力帮助你。
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"