我想在Ruby中做这样的事情
我有这样的文字
some_random_text unit 1 some_random_text chap 3 some_random_text
现在我想提取
some_random_text, 'unit 1', some_random_text, 'chap 3'
为此,我使用像这样的表达式
my_string.split(/(unit[1-9 ]+|chap[1-9 ]+)/)
我为'unit'和'chap'重复模式[1-9] +,因为如果我像
那样分组 /((unit|chap)[1-9 ]+)/
返回
some_random_text, 'unit', 'unit 1', some_random_text, 'chap', 'chap 3'
它有我不需要的额外元素。
如何进行我需要的分组?
答案 0 :(得分:1)
试试这个:
my_string.split(/((?:unit|chap)[1-9 ]+)/)
您的split
正则表达式包含两个捕获组(...)
,它们包含在结果中。使用(?:...)
将无法捕获较小的组,因此将其命名为非捕获组。
另请注意,[1-9 ]+
可能会捕获多个空格和数字,但永远不会为零unit 1 2 4
。您可能需要/((?:unit|chap) +[1-9])/
或/((?:unit|chap) +[1-9][0-9]*)/