2008-11-26 76 views
7

我想在emacs(python-mode)中爲Python文檔字符串添加特殊標記。Elisp中的正則表達式包含換行符

目前我能提取單個符合:

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

這現在工作:

"""Foo""" 

但是,一旦有一個換行符,如:

""" 
Foo 

""" 

它不再工作了。這是合乎邏輯的,因爲.不包括換行符(\n)。 我應該使用角色類嗎?

如何更正此正則表達式以包含""" """之間的所有內容?

在此先感謝!

回答

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

「*?」構造是「*」的非貪婪版本。

+0

由於一些奇怪的原因,當使用此正則表達式時,我的emacs掛起。 掛在`Loading vc ... done` – wunki 2008-11-26 15:09:13

0

e-ccs正則表達式中的換行符由C-q C-j輸入,所以只需粘貼一個包含的組。和C-q C-j到你的正則表達式中。因爲我使用正則表達式工具來構建它們,所以我的引用並不完全像你的那樣,但我希望這些變化很明顯。

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

對不起,我不能更好地格式化,計算器不同意我的看法。

此外,它可能會顯示爲emacs中的換行符。

+0

這是不正確的。對於elisp中的字符串文字,您確實使用`\ n`。當輸入一個正則表達式交互性時,比如使用正則表達式isearch,那麼只有`\ n`不是換行符,而是需要`C-q C-j`。 – derekv 2013-02-20 17:41:13

0

這工作半:

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

但添加RET時的標記不見了。

建議的正則表達式"\\(\"\\{3\\}\\(.*\n?\\)*?\"\\{3\\}\\)"使我的emacs在打開.py文件時掛起。

也許是時候訪問Emacs的郵件列表..

+0

\ n在emacs中不是換行符 – 2008-11-27 13:02:57

+0

@JoelBorggrén-Franck錯誤,Lisp字符串中的`\ n`代表換行符。 – tripleee 2013-08-29 16:27:43

0

最好的和最簡單的方法是這樣的一個:

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

您可以使用的definitly之間沒有「」」和‘’的任何字符「而不是|

相關問題