Elisp中的Regexp包含换行符

时间:2008-11-26 12:48:48

标签: regex emacs elisp

我正在尝试在emacs(python-mode)中为Python文档字符串添加一个特殊标记。

目前,我可以使用以下内容提取单行:

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

现在可以使用:

"""Foo"""

但是很快就会出现一个换行符:

"""
Foo

"""

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

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

提前致谢!

4 个答案:

答案 0 :(得分:2)

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

“*?” construct是“*”的非贪婪版本。

答案 1 :(得分:0)

emacs regexps中的换行符由C-q C-j输入,所以只需粘贴一个包含的组。和C-q C-j进入你的正则表达式。当我使用regexp-tool来构建它们时,我的并没有完全引用它,但我希望这些变化是显而易见的。

\("\{3\}\(.\| C-QC-J \)+"\{3\}\)

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

此外,它可能会在emacs中显示为换行符。

答案 2 :(得分:0)

这有效的一半:

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

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

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

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

答案 3 :(得分:0)

这是最好最简单的方法:

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

您可以使用绝对不在“”和“”之间的任何字符,而不是 |

相关问题