【问题标题】:Block Indent Regex块缩进正则表达式
【发布时间】:2011-12-02 20:11:07
【问题描述】:

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

我正在尝试实现一个正则表达式来仅选择制表符缩进块,但我找不到让它工作的方法:

例子:

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

所以我需要这样的块:

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

INDENT(3)
    CONTENT(c)

我该怎么做?


真的tks,差不多了,这是我最初的需求:

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

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


【问题讨论】:

    标签: ruby regex parsing block indentation


    【解决方案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)*,在行首至少使用 2 个制表符。

    【讨论】:

    • 伙计,真的 tks,差不多了,这是我最初的需求:table tr td "joao" "joao" td "marcos" 我需要单独的 "td" 块,我可以调整你的例子吗那?真的tks!
    • @user999472 - 这是一个完全不同的问题......你为什么不直接问你需要什么?您需要将文件解析为 HTML 文档吗?如果您需要根据您的代码调整我的解决方案,您只需添加另一个选项卡:^\t(\t+)(\S.*)\n(?:\1\t.*\n)*^(\t{2,})(\S.*)\n(?:\1\t.*\n)*
    • 是的,它是一个来自预编译器项目的词法分析器,我认为第一个例子很容易理解,但不匹配,srry about that
    • 谢谢@Kobi 第二个正是我想要的!我将使用您的解决方案编辑原始帖子,tks!
    • @user999472 - 没问题,欢迎堆栈溢出!确实没有必要为问题添加解决方案(或者您的意思是答案?)。如果格式正是这样,您可以在模式中更具体,例如:^([\t ]+td\n(?:[\t ]+"[^"]*"\n)*)
    【解决方案2】:

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

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

    这要求您的行不能以块开头的空格开头。

    【讨论】:

    • 对不起,我不知道 ruby​​ 可以帮助你更多
    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 2017-08-11
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2016-01-06
    相关资源
    最近更新 更多