2016-11-02 4 views
0

を削除せずにコメントしていない:マッチング正規表現が、コメントのコード行で

for iters in len(array) # for iters in len(array) 
    for iters in len(array) 

私はforinの両方に一致しようとしているが、コメントの外側です。

は、この正規表現(?<!#.)(\bfor\b|\bin\b)を使用してみましたが、それはマッチングにつながる:

*for* iters *in* len(array) # for iters *in* len(array) 
    *for* iters *in* len(array) 

また、コメント内inと一致します。そして、現在、コメント内にinがどのように回避されるかわかりません。私はあなたの最善の策は唯一に「#」と一致で任意の行を分割することだと思う...

+0

どのような言語ですか? '#。*(* SKIP)(* FAIL)| \ b(| in)\ b' https://regex101.com/r/Fj3U2X/1 – chris85

+0

これはPythonで書かれています。編集するタグを指定する:) –

答えて

1

はここで別の解決策を見たが、それは、この場合には適用されないコメントを、削除関与します最初の部分ですが、文字列の中に '#'がないことを確認する必要があります。あなたは、単に行が一致するかどうかをテストする必要がある場合

1

あなたはuse thisことができます:あなたがのためにと内の各発生が必要な場合は

^[^#]*(\bfor\b|\bin\b) 

something like thisしてみてください:

(?:^|\G)[^#]*?(\bfor\b|\bin\b) 

(?:^|\G)

からことを保証します行の開始点、または前の試合がオフの場合は、 #文字はありません。

-1

コメントを処理するために非キャプチャグループを使用すると機能します。

したがって: (\bfor\b|\bin\b)|(?:#.*)は、最初にどこにでもfor/inにマッチします、その後、非キャプチャグループは、コメントと一致し、それらを無視します。

関連する問題