gpt4 book ai didi

emacs 查询替换正则表达式倒置

转载 作者:行者123 更新时间:2023-12-02 02:14:18 26 4
gpt4 key购买 nike

是否存在针对 subexps 的现有包query-replace-regexp?

例如给定以下内容

var foo1 = blah( properties, property_id);

var foo2 = blah(properties, property_id );

var foo3 = blah( properties, property_id );

我想删除大括号周围的填充。

通常,方法是对要保留的位进行分组,然后组装一个替换位。

搜索:

\(var .* = blah\s-*(\)\s-*\(.*?\)\s-*\()\)

替换:

\1\2\3

但是,使用正则表达式对我的位进行分组似乎要容易得多想要删除而不是相反。就像这个:

var .* = blah\s-*(\(\s-*\).*?\(\s-*\))

我将从中得到两个子组。我如何定位它们进行更换?

编辑:我要求一种交互方式来“反转”给定的正则表达式。所以接口(interface)类似于query-replace-regexp

  1. 输入正则表达式
  2. 为第 1 组输入替换
  3. 为第 2 组输入替换

最佳答案

我认为这应该有一些变化:

(defun remove-padding ()
(interactive)
(while (search-forward-regexp
"var .* = [a-zA-Z_]+\\s-*(\\(\\s-*\\).*?\\(\\s-*\\))"
nil t)
;; Replace the 2 subexpressions with nothing
(replace-match "" nil t nil 2)
(replace-match "" nil t nil 1)))

但是,您也可以考虑使用像 indent 这样的工具取决于您的用例。

编辑: 下面是一个非常简单的交互版本。 query-replace-regexp 函数非常复杂,我没有尝试重现它的所有功能。

(require 're-builder)
(defun query-replace-subexpressions (regexp replacements)
"REPLACEMENTS need to be in reverse order if passed from lisp!"
;; Read the correct number of subexpressions
(interactive
(let* ((re (read-from-minibuffer "Query replace subexps: "))
(num-subexps (reb-count-subexps re))
(replacement-list nil)
(replacements (dotimes (rep num-subexps)
(setq replacement-list
(cons
(read-from-minibuffer
(format "Replace subexpression %s with: " rep))
replacement-list)))))
(list re replacement-list)))
;; Search
(let ((len (length replacements)))
(while (search-forward-regexp regexp nil t)
(replace-highlight (match-beginning 0) (match-end 0)
(point-min) (point-max) regexp
t case-fold-search)
;; Query
(when (save-match-data (y-or-n-p "Replace this occurrence? "))
;; Make all the replacements
(dotimes (i len)
(replace-match (nth i replacements) nil nil nil (- len i)))))
(replace-dehighlight)))


;; Test it out below
(query-replace-subexpressions
"var .* = [a-zA-Z_]+\\s-*(\\(\\s-*\\).*?\\(\\s-*\\))"
'("" ""))

var foo1 = blah(properties, property_id );

var foo2 = blah (properties, property_id );

var foo3 = blah( properties, property_id );

关于emacs 查询替换正则表达式倒置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11280195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com