Ruby ReGex拆分第n条新线

时间:2015-06-02 12:55:01

标签: ruby regex

我有这样的文字:

str = "

This is line 1.
This is line 2.
This is line 3.
This is line 4.
This is line 5.
This is line 6.
This is line 7.
This is line 8.
This is line 9.
This is line 10."

在ruby中,我希望每隔3行换一行此文本的数组。

arr = ["This is line 1.
    This is line 2.
    This is line 3.",

    "This is line 4.
    This is line 5.
    This is line 6.",

    "This is line 7.
    This is line 8.
    This is line 9.",

    "This is line 10."]

我无法获得正确的RegEx规则来完成它。 到目前为止,我得到了

arr = str.split(/((?:.*)\n){3}/)

不幸的是,它不仅匹配第3行&n;而且还匹配它之前的文本。如果以某种方式我可以排除该文本

,那将是很棒的

5 个答案:

答案 0 :(得分:2)

这可能不像正则表达式那样华丽,但也许它更容易理解......

string.split(/\n/).each_slice(3).map { |slice| slice.join("\n") }

答案 1 :(得分:1)

您可以使用以下正则表达式:

(\n?[^\n]*\n[^\n]*\n[^\n]*)

http://rubular.com/r/f2at0uX3D2

请注意,您需要使用匹配除换行符之外的任何内容的.*,而不是[^\n]*

或更精确:

((?:[^\n]*\n){3})

答案 2 :(得分:1)

((?:[^\n]*\n){3})

由此分开。参见演示。

https://regex101.com/r/pG1kU1/14

答案 3 :(得分:1)

您的正则表达式几乎正确..只需包含正确的捕获组:

((?:(?:.*)\n){3})
^ ^^            ^

请参阅DEMO

答案 4 :(得分:0)

使用捕获组

del df['dist']

群组((?:(?:.*)\n){3})|(.*)$ 1将返回您需要的内容

DEMO - Regex101 DEMO - Rubular