我在尝试使正则表达式分组正确发生时遇到问题。我有一个字符串,说:
dtASDF[a, b, c]
我使用以下表达式:
dt\\(.*\\)\\[\\(.*\\), \\(.*\\), \\(.*\\)\\]
它将a
,b
和c
分别分组,这是完美的。问题在于该字符串可能是:
dtASDF[a, .(b, c), .(d, e)]
在这种情况下,上面的表达式不起作用,因为它只是在寻找逗号。因此,问题是,由于emacs没有环视功能,是否有一种方法可以按逗号分隔分组,但是如果逗号在括号之间则不能?
换句话说,这里的分组应该是:a
,.(b, c)
,.(d, e)
。
我知道SO上也存在类似的问题,但是我找不到与elisp regex相关的问题,这很棘手,因为它没有通常用于这种事情的环顾四周。
答案 0 :(得分:2)
这是分组模式吗?
"\\(\\.([^)]*)\\|.*?\\)"
因此,全文:
"dt\\(.*\\)\\[\\(\\.([^)]*)\\|.*?\\), \\(\\.([^)]*)\\|.*?\\), \\(\\.([^)]*)\\|.*?\\)\\]"
n.b。如果您想通过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))))
"]")