Emacs在单行三引号文档字符串上搜索/替换宏

时间:2015-08-27 20:39:25

标签: regex emacs

我想查找三引号单行文档字符串的所有实例:

def foo(bar):
    """Frobnicate bar."""
    ...

并将尾随三重引号放在新行上:

def foo(bar):
    """Frobnicate bar.
    """
    ...

即。第二组引号在其自己的行上(三引号也可以拼写为'''...'''

我在分组parens方面遇到了麻烦,即

(defun single-line-tqstring ()
 (interactive)
 (re-search-forward
  "^ +\"\"\".*\"\"\"$"))

将找到单行三引号字符串的下一个实例。为了解释不同的引号并保存缩进,我需要创建一些组,但是这找不到任何内容:

(defun single-line-tqstring ()
 (interactive)
 (re-search-forward
  "^\( +\)\([\"']\{3\}\).*\2$"))

single-line-tqstring: Search failed: "^( +)([\"']{3}).*^B$"

我是否完全误解了语法?

1 个答案:

答案 0 :(得分:1)

好的,所以我找到了解决方案

(defun fix-single-line-tqstring ()
 (interactive)
 (replace-regexp
  "^\\( +\\)\\([\"']\\{3\\}\\)\\([^\n]*\\)\\2$"
  "\\1\\2\\3\n\\1\\2"))

虽然反斜杠有点令人目眩......(我确定必须有更好的方法来做这个......?)