Ruby on rails 如何获取带有多个引号的字符串的子字符串?Rails/Ruby

Ruby on rails 如何获取带有多个引号的字符串的子字符串?Rails/Ruby,ruby-on-rails,ruby,Ruby On Rails,Ruby,给定一个字符串,如(Shift-opened:\'he clams\'sick\'但不确定\')如何提取第一组引号之间的部分?我尝试过分割、切片和挤压的组合,但总是遇到不起作用的情况。谢谢 编辑:用户输入文本,可以是任何形式,因此是的,某人可能有奇数个引号。为记录目的生成输入前的文本。一些例子: n = (Shift opened: \"he clams \"sick\" but not sure\") n.split('"')[1] > "he claims " 如果我能找到由spli

给定一个字符串,如
(Shift-opened:\'he clams\'sick\'但不确定\')
如何提取第一组引号之间的部分?我尝试过分割、切片和挤压的组合,但总是遇到不起作用的情况。谢谢

编辑:用户输入文本,可以是任何形式,因此是的,某人可能有奇数个引号。为记录目的生成输入前的文本。一些例子:

n = (Shift opened: \"he clams \"sick\" but not sure\")
n.split('"')[1] > "he claims "
如果我能找到由split创建的数组的大小,我可以执行
split(“”)[1..size-1]
,但我不确定如何找到它

n = (Shift opened: \"\"sick\"\")
n.squeeze('"').split('"')[1] >> "sick"
那很好


这更多是为了检查错误,确保人们在输入时使用引号,不会把事情弄糟。不,我无法编辑字符串的生成方式。希望我足够清楚!

您可以利用regex默认贪婪的事实,使用
/“(.*)”
,它将捕获第一个引号和最后一个引号之间的所有文本:

n = 'Shift opened: "he clams "sick" but not sure" some more text'

n[/"(.*)"/, 1]
# => "he clams "sick" but not sure" 

n = "Shift opened: \"\"sick\"\""
n[/"(.*)"/, 1]
# => ""sick""

我不确定您是否希望递归地提取引号上的文本并获得如下内容:

=> "he clams "sick" but not sure"
=> "sick"

or "lorem ipsum "xxxxx yyyy "alpha beta" zzzz wwww" dol"
=> "lorem ipsum "xxxxx yyyy "alpha beta" zzzz wwww" dol"
=> "xxxxx yyyy "alpha beta" zzzz wwww"
=> "alpha beta"
也许您需要一个简单的CFG:

S -> aS | a
a = /\".*\"/

或者迭代每个引号上的字符串堆叠子字符串

请发布一些尝试。此外,如果您能更具体地了解输入的格式,可能会有所帮助…例如,是否总是至少有两个引号?是否有奇数个引号?等等。谢谢,这似乎是可行的。我一直不喜欢正则表达式,但我想它们有它们的用途s