通常,我可以使用优秀的rx宏来创建可读的正则表达式,并确保我已经转义了正确的元字符.
(rx (any "A-Z")) ;; "[A-Z]"
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何创建害羞的群体,例如\(?:AB\).rx有时会在输出中产生它们:
(rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)"
Run Code Online (Sandbox Code Playgroud)
但我想明确添加它们.我可以:
(rx (regexp "\\(?:AB\\)"))
Run Code Online (Sandbox Code Playgroud)
但这失败了rx.
在一个完美的世界里,我希望能够写下:
(rx (shy-group "A"))
Run Code Online (Sandbox Code Playgroud)
我会满足于这样的事情(这些都不起作用):
;; sadly, `regexp` only accepts literal strings
(rx (regexp (format "\\(?:%s\\)" (rx WHATEVER))))
;; also unfortunate, `eval` quotes the string it's given
(rx (eval (format "\\(?:%s\\)" (rx WHATEVER))))
Run Code Online (Sandbox Code Playgroud)
如何使用害羞组创建正则表达式rx?
我认为rx表单的结构消除了显式创建害羞组的任何需要 - 可能需要害羞组的所有内容都由其他语法来解释.
例如你自己的例子:
(rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
479 次 |
| 最近记录: |