给定一个像(Shift opened: \"he clams \"sick\" but not sure\")
这样的字符串,我如何只提取第一组引号之间的部分?我尝试过分割,切片和挤压的组合,但总是碰到它不起作用的情况。感谢。
编辑:用户输入文本,可以是任何形式,所以是的,某人可能有奇数的引号。生成输入之前的文本以用于记录目的。一些例子:
n = (Shift opened: \"he clams \"sick\" but not sure\")
n.split('"')[1] > "he claims "
如果我能找到通过拆分创建的数组的大小,我可以split('"')[1..size-1]
,但我不知道如何找到它。
n = (Shift opened: \"\"sick\"\")
n.squeeze('"').split('"')[1] >> "sick"
工作正常。
这更适用于错误检查,并确保人们在输入时使用引号,它不会搞砸。不,我不能编辑字符串的生成方式。希望我足够清楚!
答案 0 :(得分:1)
您可以利用默认情况下正则表达式贪婪的事实,并使用/"(.*)"
,它将捕获第一个和最后一个引号之间的所有文本:
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""
答案 1 :(得分:0)
我不确定你是否想要递归地提取引号上的文字并得到这样的内容:
=> "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 = /\".*\"/
或迭代每个引号上的字符串堆叠子串