在Ruby中,尝试从长字符串中提取一些模式,并将每个匹配的模式放入一个字符串数组中。例如,长字符串输入可以是
"\"/ebooks/1234.pdf\" \"/magazines/4321.djvu\""
预期结果是
["/ebooks/1234.pdf", "/magazines/4321.djvu"]
这是一个正斜杠,其次是三个关键词之一:电子书,杂志或报纸,然后是另一个正斜杠,接着是除双引号之外的任意数量的非空格字符。
使用交替(管道垂直条)尝试此模式,但失败了:
/\/(ebooks|magazines)\/[^\s"]+/
这给出了这个结果:
[["ebooks"], ["magazines"]]
正确的模式应该是什么?
答案 0 :(得分:1)
"\"/ebooks/1234.pdf\" \"/magazines/4321.djvu\""
.scan(/\/(?:ebooks|magazines|newspapers)\/[^\s"]+/)
# => ["/ebooks/1234.pdf", "/magazines/4321.djvu"]
"\"/ebooks/1234.pdf\" \"/magazines/4321.djvu\""
.scan(/"([^"]+)"/).flatten
# => ["/ebooks/1234.pdf", "/magazines/4321.djvu"]