2016-09-23 16 views
2

私はこの正規表現を設計しようとしていましたが、私の人生のために、* /が特別な単語の前に打たれた場合、一致しないようにはできませんでした。Regex Match全文多行コメントCointaining特別な単語

複数行のコメント全体に、特別な単語が含まれている場合にのみ一致させようとしています。私は否定的な先読み/後ろを試しましたが、それを正しく行う方法を理解できませんでした。

これは私がこれまで持っているものです。 (?s)(/\*.+?special.+?\*/)

は私が閉じるか、恐ろしくオフベースのですか?私は(?!\*/)を含めて失敗しました。

https://regex101.com/r/mD1nJ2/3

編集:私は私が削除正規表現にいくつかの冗長な部分を持っていました。

答えて

2

あなたは完全にオフベースませんでした。(例えばx詳細モードのため、修飾子を気に!)技術が焼き貪欲トークンと呼ばれる

/\*     # match /* 
(?:(?!\*/)[\s\S])+? # match anything lazily, do not overrun */ 
special    # match special 
[\s\S]+?   # match anything lazily afterwards 
\*/     # match the closing */ 

a demo on regex101.comを参照してください。


ドキュメントを分析し、コメントをgrepして(例えば BeautifulSoupなど)、文字列関数をそれらの上で実行してください( if "special" in comment...)。

+1

Pythonの 're'は' re.DOTALL'修飾子をサポートしています。単純なドットは '[\ s \ S]'回避策を使う必要はありません。見て、OPはすでにインラインバージョンのdotallフラグ '(?s)'を使用しています。 –

+0

@WiktorStribiżew:私はより多くの習慣があると思う - 「DOTALL」も同様に良いと思う。 – Jan

+0

@WiktorStribiżewありがとうございました! – Lithium2142