Block Indent Regex

时间:2011-12-02 20:11:08

标签: ruby regex parsing block indentation

我遇到了关于正则表达式的问题。

我正在尝试实现正则表达式以仅选择制表符缩进块,但我无法找到使其工作的方法:

示例:

INDENT(1)
    INDENT(2)
        CONTENT(a)
        CONTENT(b)
    INDENT(3)
        CONTENT(c)

所以我需要像以下一样的块:

INDENT(2)
    CONTENT(a)
    CONTENT(b)

INDENT(3)
    CONTENT(c)

我怎么能这样做?


真的很好,几乎就是这样,这是我最初的需要:

table
    tr
        td
            "joao"
            "joao"
        td
            "marcos"

我需要分开的“td”块,我可以调整你的例子吗?


2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式来获取组...

[^\s]*.*\r\n(?:\s+.*\r*\n*)*

这要求你的线条不要以块的开头的空格开头。

答案 1 :(得分:1)

这取决于你想要做什么,但也许是这样的:

^(\t+)(\S.*)\n(?:\1\t.*\n)*

工作示例:http://www.rubular.com/r/qj3WSWK9JR

模式搜索:

  • ^(\t+)(\S.*)\n - 一个以标签开头的行(我还捕获了一组中的第一行,只是为了查看效果),然后是
  • (?:\1\t.*\n)* - 包含更多标签的行。

同样,您可以将^( +)(\S.*)\n(?:\1 .*\n)*用于空格(example)。但是,混合空格和制表符可能会有点问题。

对于更新后的问题,请考虑使用^(\t{2,})(\S.*)\n(?:\1\t.*\n)*,在该行的开头至少有两个标签。