1

如果我有:

    ["eaacbf7e-37b3-509e-b2d1-ddce7f0e1f6e", "f9e52e06-697a-57af-9566-d05fabb001a4", 
     "19edb822-eccb-5289-8fee-a39cdda66cd5", "83d3ad63-b468-5a1e-ba6c-6b69eb4a3dc5"]

(整个东西是一个字符串)

是否有一个简单的正则表达式可用于选择引号内的内容(包括引号)?

由于上述内容以字符串形式出现。我想使用正则表达式来选择引号中的每个 id(连同引号)并将它们存储到一个 ruby​​ 数组中。

4

3 回答 3

3

只需使用此正则表达式

"[^"]*"

[^"]*表示匹配除"ie以外的任何字符[^"]0 到多次 ie*

于 2012-10-30T04:02:23.653 回答
2

尝试使用带有正则表达式的String#scan方法/"[^"]+"/

ids = str.scan(/"[^"]+"/) # => [ "eaacbf7e-...", "f9e52e06-...", ...]
puts ids
"eaacbf7e-37b3-509e-b2d1-ddce7f0e1f6e"
"f9e52e06-697a-57af-9566-d05fabb001a4"
"19edb822-eccb-5289-8fee-a39cdda66cd5"
"83d3ad63-b468-5a1e-ba6c-6b69eb4a3dc5"

该表达式分解如下:

str.scan(/"[^"]+"/)
#         │├──┘│└─ Another literal quotation mark (").
#         ││   └─ Match one or more of the previous thing.
#         │└─ A class matching any character except (^) quotation marks.
#         └─ A literal quotation mark (").
于 2012-10-30T04:42:46.667 回答
1

你为什么要以这种格式获取字符串?它看起来像 JSON 输出,如果是,则应该由 JSON 模块解析。

require 'json'
require 'pp'

foo = [
  "eaacbf7e-37b3-509e-b2d1-ddce7f0e1f6e",
  "f9e52e06-697a-57af-9566-d05fabb001a4",
  "19edb822-eccb-5289-8fee-a39cdda66cd5",
  "83d3ad63-b468-5a1e-ba6c-6b69eb4a3dc5"
]

foo.to_json
=> "[\"eaacbf7e-37b3-509e-b2d1-ddce7f0e1f6e\",\"f9e52e06-697a-57af-9566-d05fabb001a4\",\"19edb822-eccb-5289-8fee-a39cdda66cd5\",\"83d3ad63-b468-5a1e-ba6c-6b69eb4a3dc5\"]"

这可能就是你得到的字符串。如果你使用 JSON 解析器解析它,你会得到一个 Ruby 数组:

pp JSON[ foo.to_json ]
=> ["eaacbf7e-37b3-509e-b2d1-ddce7f0e1f6e",
"f9e52e06-697a-57af-9566-d05fabb001a4",
"19edb822-eccb-5289-8fee-a39cdda66cd5",
"83d3ad63-b468-5a1e-ba6c-6b69eb4a3dc5"]
于 2012-10-30T06:13:48.910 回答