7

emacs (python-mode) で Python ドキュメント文字列に特別なマークアップを追加しようとしています。

現在、次の方法で1行を抽出できます。

(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

これは半分動作します:

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

しかし、RETを追加すると、マークアップはなくなります。

提案された正規表現"\\(\"\\{3\\}\\(.*\n?\\)*?\"\\{3\\}\\)"により、.pyファイルを開くときにemacsがハングします。

たぶん、emacsメーリングリストにアクセスする時が来たのかもしれません。

于 2008-11-26T15:24:30.543 に答える
0

emacs regexps の改行は Cq Cj によって入力されるため、 を含むグループを貼り付けるだけです。Cq Cj を正規表現に追加します。私は regexp-tool を使用してそれらを構築しているため、私のものはあなたのものとして完全には引用されていませんが、変更が明らかであることを願っています.

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

申し訳ありませんが、より適切にフォーマットすることはできません。stackoverflow は私に同意しません。

また、おそらくemacsでは改行として表示されます。

于 2008-11-26T14:19:47.587 に答える