2017-07-16 9 views
0

私はPython Regexを書こうとしています。 まず、ファイルの各行をリストに読み込みました。リストをループしています。Python Regex(Lookaround)

Q1。

a = a+5 

がキャプチャされません:私は、算術演算子が

キャプチャのようなthem.Somethingの間にスペースがない場合にキャプチャしたい。このため

a = a + 5 

を、私は次のように書かれています:

for i in array: 

     pattern = re.search(r"\S(\+|\-|\*|\\)\S",i) 

\ S:スペース以外のもの

(+ | - | * | \):算術演算子S \

:スペース

以外しかし、問題はそのポストインクリメント演算子が使用されている行を取得する、です。

キャプチャ:

a = a++ 

どのように私はそれをポストインクリメント演算子が使用されている行をキャプチャしないように正規表現式を書くことができます。

Q2.ファイル内で複数の行コメントが使用されている場所をキャプチャします。

私は下の表記を書いてみましたが、それはキャプチャに失敗しています。私はどこで間違っていたのか分かりません。助けてください。

for i in array: 

     pattern = re.search(r"\/\*[A-Za-z0-9_]\*\/",i) 

答えて

0

質問1の場合は、プラス記号の前にスペースまたはプラス記号を付けずに、スペースまたはプラス記号を続けないようにします。これは、あなたがマイナスの代わりにプラス、または星のと同じ式を行う、またはスラッシュができ

r"(?<![+\s])[+](?![+\s])" 

を書き込むことができます。次に、これらの式を|記号で結合します。

質問2について、あなたはそれがネストされた複数行のコメントを処理しません。もちろん、

r"[/][*](?:[^*]|[*](?![/]))*[*][/]" 

試すことができます。これらのために、単純な正規表現では十分ではありません。

0

最初の問題は、少なくとも現行の文字列の場合はネゲートされた文字クラスの助けを借りて解決できます。あなたが示した問題は、\Sが空白以外の文字と一致するためです。空白でない任意の文字と一致させるには、[^\s+*/()-]の無効な文字クラスを使用してください。-/+*、さらには(および)に一致するようにするには、あなたの最初の正規表現 - その部門のオペレータが/、ない\があるべき注意 -

pat = r"[^\s+*/()-]([+*/-])[^\s+*/()-]" 

のように書くことができregex demo

秒1で解決される問題であるを参照してください。

pat = r"/\*[^*]*\*+(?:[^/*][^*]*\*+)*/"; 

regex demoを参照してください。

詳細

  • /\* - の0+のシーケンス - *以外の試合0+文字1+リテラル*
  • (?:[^/*][^*]*\*+)*と続く -
  • [^*]*\*+が起動コメント:
    • [^/*][^*]*\*+ - /または*[^/*]と一致)が1+アスタリスク(\*+
  • /と続く0+非アスタリスク文字([^*]*)と、続いて - /
を閉じます