我正在开始编程,我正在寻找一个程序来提取文本中两个单词之间包含的所有单词(以便将它们存储在变量中)
例如,使用单词“ START”和“ STOP”:“ START 1 2 3 STOP 5 6 START 7 8 STOP 9 10”
我想存储在变量中:1 2 3 7 8
从下面的代码中可以看到,我开始使用Ruby进行操作,当前的想法是将字符串“ global”转换为数组,然后对string1和string2的位置进行编号;然后使用初始数组#string1 + 1,…string2 -1创建一个数组'string1'。不幸的是,它仅工作一次,因为.index函数仅在第一次出现时起作用...是否会有更好的方法来做到这一点?
预先感谢您的帮助
text = "0 start 2 3 4 stop 6 7 start 9 10 stop 12"
start= text.split(' ')
a = start.index('start')
b = start.index('stop')
puts a
puts b
puts c = start[a+1,b-a-1].join(" ")
# returns
#1
#5
#2 3 4 ```
您可以从scan
-method和一个正则表达式开始:
text = "0 start 2 3 4 stop 6 7 start 9 10 stop 12"
res1 = text.scan(/start\s*(.*?)\s*stop/) #[["2 3 4"], ["9 10"]]
res2 = res1.flatten #["2 3 4", "9 10"]
或没有中间变量:
res = text.scan(/start(.*?)stop/).flatten #["2 3 4", "9 10"]
说明:
有关扫描方法,请参见https://apidock.com/ruby/String/scan。
正则表达式/start\s*(.*?)\s*stop/
是
\s*
:任何空格字符(.*?)
:
(
与)
负责记忆的内容。.
表示任何字符,*
表示重复(零个或多个字符),?
将结果限制为最短的可能性(有关详细信息,请参见下文)\s*
:任何空格字符
stop
结果是一个命中率为正则表达式的数组。正则表达式可以包含要检测的不同部分(多个()
对)。所以它是一个数组数组。在我们的例子中,每个内部数组都有一个元素,因此您可以使用它flatten
来获得一个“扁平”数组。
如果不在?
正则表达式中使用,则可以找到2 3 4 stop 6 7 start 9 10
而不是较短的部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句