7

我正在尝试在 emacs(python 模式)中向 Python 文档字符串添加特殊标记。

目前我可以提取一行:

(font-lock-add-keywords
 'python-mode
 '(("\\(\"\\{3\\}\\.+\"\\{3\\}\\)"
    1 font-lock-doc-face prepend)))

这现在有效:

"""Foo"""

但是只要有一个换行符,例如:

"""
Foo

"""

它不再起作用了。这是合乎逻辑的,因为.不包括换行符 ( \n)。我应该使用字符类吗?

如何更正此正则表达式以包含 之间的所有内容""" """

提前致谢!

4

4 回答 4

2
"\\(\"\\{3\\}\\(.*\n?\\)*?\"\\{3\\}\\)"

这 ”*?” 构造是“*”的非贪婪版本。

于 2008-11-26T13:53:19.527 回答
0

Emacs 正则表达式中的换行符由 Cq Cj 输入,因此只需粘贴一个包含 . 并将 Cq Cj 放入您的正则表达式中。当我使用 regexp-tool 构建它们时,我的没有完全引用为你的,但我希望这些变化是显而易见的。

\("\{3\}\(.\|C-qC-j\)+"\{3\}\)

抱歉,我无法更好地格式化它,stackoverflow 不同意我的观点。

它也可能会在 emacs 中显示为换行符。

于 2008-11-26T14:19:47.587 回答
0

这工作一半:

(font-lock-add-keywords
     'python-mode
      '(("\\(\"\\{3\\}\\(.\\|\n\\)*?\"\\{3\\}\\)" 
         1 font-lock-warning-face prepend)))

但是当添加 RET 时,标记就消失了。

建议的正则表达式"\\(\"\\{3\\}\\(.*\n?\\)*?\"\\{3\\}\\)"使我的 emacs 在打开 .py 文件时挂起。

也许是时候访问 emacs 邮件列表了。

于 2008-11-26T15:24:30.543 回答
0

最好和最简单的方法是这个:

font-lock-add-keywords
 'python-mode
 '(("\\(\"\\{3\\}\\[^|]*?\"\\{3\\}\\)"
    1 font-lock-doc-face prepend)))

您可以使用绝对不在 """ 和 """ 之间的任何字符来代替| .

于 2013-08-29T13:58:05.173 回答