正则表达式形成包含组词的模式

时间:2011-02-13 07:13:18

标签: ruby regex

我想在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' 

它有我不需要的额外元素。

如何进行我需要的分组?

1 个答案:

答案 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]*)/