Elisp Regex Match Запятые вне скобок - PullRequest
0 голосов
/ 16 ноября 2018

У меня проблема с попыткой правильной группировки регулярных выражений.У меня есть строка, скажем:

dtASDF[a, b, c]

Я использую выражение:

dt\\(.*\\)\\[\\(.*\\), \\(.*\\), \\(.*\\)\\]

И это группирует a,b и c отдельно, что идеально.Проблема в том, что строка может быть:

dtASDF[a, .(b, c), .(d, e)]

В этом случае вышеприведенное выражение не работает, так как оно просто ищет запятые.Таким образом, вопрос в том, что в emacs нет обходных путей, есть ли способ сгруппировать через запятую, но не в том случае, если запятые заключены в круглые скобки?

Другими словами, здесь должна быть группировка: a, .(b, c), .(d, e).

Мне известно, что подобные вопросы существуют в SO, но я не смог найти один, относящийся к регулярному выражению elisp, что сложно, так как в нем нет обходных путей, которыеобычно используется для такого рода вещей.

1 Ответ

0 голосов
/ 16 ноября 2018

Как насчет этого в качестве шаблона группировки?

"\\(\\.([^)]*)\\|.*?\\)"

В целом:

"dt\\(.*\\)\\[\\(\\.([^)]*)\\|.*?\\), \\(\\.([^)]*)\\|.*?\\), \\(\\.([^)]*)\\|.*?\\)\\]"

nb Если вы хотите получить подробный, но читаемый с помощью макроса rx, вы можете написать это как:

(rx "dt" (group (zero-or-more not-newline)) "["
    (group (or (seq ".(" (zero-or-more (not (any ")"))) ")")
               (minimal-match (zero-or-more not-newline))))
    ", "
    (group (or (seq ".(" (zero-or-more (not (any ")"))) ")")
               (minimal-match (zero-or-more not-newline))))
    ", "
    (group (or (seq ".(" (zero-or-more (not (any ")"))) ")")
               (minimal-match (zero-or-more not-newline))))
    "]")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...