【发布时间】:2021-03-27 23:02:17
【问题描述】:
所以,这就是我正在尝试做的事情,尽管我已经为此苦苦挣扎了一段时间。
假设我们有这个输入:
{{something|a}} text text {{another|one|with|more|items}}
我想要达到的目标:
[
["something", "a"],
["another", "one", "with", "more", "items"]
]
简单的方法是这样的:
"{{something|a}} text text {{another|one|with|more|items}}".scan(/([^\|\{\}]+)/)
但这会产生 - 完全可以预见 - 所有结果都在一个数组中(另请注意,我不希望结果中有“文本文本”,只需要花括号中的项目):
[["something"], ["a"], [" text text "], ["another"], ["one"], ["with"], ["more"], ["items"]]
然后我尝试像 (see script here) 那样做:
\{\{(([^\|\{\}]+)\|?)+\}\}
但我一定是做错了什么。
任何帮助将不胜感激! :)
【问题讨论】:
-
您无法在 Ruby 中获取某个组的所有捕获值。捕获的数量总是与模式中的捕获组一样多。所以,
.scan(/{{(.*?)}}/).flatten.map{ |x| x.split("|") }seems to work 在这里。 -
@WiktorStribiżew 如此简单直接。我应该有那样接近它...非常感谢! (只需将其发布为答案,我会很乐意接受它:))