ruby使用正则表达式进行拆分 - 但保留匹配的texted结果

时间:2016-01-11 10:16:08

标签: ruby regex parsing

我有以下字符串:

705 veliký big, great, large 707 čistý clear, clean 710 vnitřní inner, internal 

我想在每个号码前插入换行符,但仍然保留号码。像这样:

705 veliký big, great, large
707 čistý clear, clean 
710 vnitřní inner, internal 

我在String.split(/regex/)找到的所有内容总是抛弃匹配的模式。但在这种情况下,我想保留它。

我很高兴在Ruby或Textmate中这样做,但我在每个问题上都有同样的问题。匹配的模式将替换为回车符。

2 个答案:

答案 0 :(得分:4)

您在这里寻找的是positive lookahead

"705 veliký large 707 čistý, clean 710 vnitřní internal".split(/ (?=\d)/)
#⇒ ["705 veliký large", "707 čistý, clean", "710 vnitřní internal"]

要获得带回车符的字符串,只需join("\n")上面的结果。

答案 1 :(得分:0)

你可以使用这样的大括号来保持split-regex的内容:

s = '705 veliký big, great, large 707 čistý clear, clean 710 vnitřní inner, internal'
puts s.split(/(\d+)/)

(错误)结果将是:

705
 veliký big, great, large 
707
 cistý clear, clean 
710
 vnitrní inner, internal

在每个数字之前和之后完成拆分。

所以我建议先做一个gsub

puts s.gsub(/(\d+)/, "\n\\1")

<强>注意! gsub的结果再次是一个字符串(带换行符),split返回一个数组(没有换行符)!结果代码中的换行符由puts命令生成。