我正在尝试在emacs(python-mode)中为Python文档字符串添加一个特殊标记。
目前,我可以使用以下内容提取单行:
(font-lock-add-keywords
'python-mode
'(("\\(\"\\{3\\}\\.+\"\\{3\\}\\)"
1 font-lock-doc-face prepend)))
现在可以使用:
"""Foo"""
但是很快就会出现一个换行符:
"""
Foo
"""
它不再起作用了。这是合乎逻辑的,因为.
不包含换行符(\n
)。
我应该使用角色类吗?
如何更正此正则表达式以包含""" """
之间的所有内容?
提前致谢!
答案 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)))
您可以使用绝对不在“”和“”之间的任何字符,而不是 | 。