Отступ блока Regex - PullRequest
       18

Отступ блока Regex

1 голос
/ 03 декабря 2011

У меня проблемы с регулярным выражением.

Я пытаюсь реализовать регулярное выражение для выбора только блоков отступа вкладки, но я не могу найти способ заставить его работать:

Пример:

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 ]

1 голос
/ 03 декабря 2011

Это зависит от того, что именно вы пытаетесь сделать, но может быть что-то вроде этого:

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

Рабочий пример: http://www.rubular.com/r/qj3WSWK9JR

Шаблон ищет:

  • ^(\t+)(\S.*)\n - строка, которая начинается с табуляции (я также захватил первую строку в группе, просто чтобы увидеть эффект), за которой следует
  • (?:\1\t.*\n)* - строки с несколькими вкладками.

Аналогично, вы можете использовать ^( +)(\S.*)\n(?:\1 .*\n)* для пробелов ( пример ). Смешивание пробелов и табуляции может быть немного проблематичным.

Для обновленного вопроса рассмотрите возможность использования ^(\t{2,})(\S.*)\n(?:\1\t.*\n)*, по крайней мере, для 2 вкладок в начале строки.

1 голос
/ 03 декабря 2011

Вы можете использовать следующее регулярное выражение для получения групп ...

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

это требует, чтобы ваши строки не начинались с пробела для начала блоков.

...