2016-04-19 19 views
1

速い質問... あるパターンに含まれていない限り、コード内の特定の文字と一致する正規表現が必要です。Regex RE:このパターン以外のすべて

C(= O)が直前についていないので、Nと一致するものが続くか、何か先にあるものが必要です。

例:

に一致する必要がありますが、ので、それはアンカーを必要としない

C(=O)N 

C(=O)CN 

と一致しないでください。のため

C(=O)NCCCN 

が一致している必要があります最後のN任意の助けをいただければ幸いです

(?!C\(=O\)N$)[N] 

これまでのところ、私はこれを持っています。

答えて

2

あなたは否定後読みを使用することができます。

(?<!C\(=O\))N 

はリテラルC(=O)シーケンスですぐに先行していない場合にのみ、Nがマッチしてしまいますregex demo

を参照してください。

(?<!...)は、ネガティブルックアヘッドと呼ばれます。文字を消費しません(正規表現インデックスは移動しません)。の文字列に何かが存在しないかどうかを確認するだけです。の現在の位置より前です。テキストが一致する場合、一致は失敗します(一致するものはありません)。詳細はLookaroundsを参照してください。

In Pythonr'(?<!C\(=O\))N'

import re 
p = re.compile(r'(?<!C\(=O\))N') 
strs = ["C(=O)N", "C(=O)CN", "C(=O)NCCCN"] 
print([x for x in strs if p.search(x)]) 
+0

ありがとうございました。あなたは<私に記号を説明できますか? – ben

+1

'(?<!...)'は、* negative lookahead *と呼ばれます。文字を消費しません(正規表現インデックスを移動しません)が、現在の位置より前の*文字列に何かが存在しないかどうかをチェックします。テキストが一致する場合、一致は失敗します(一致するものはありません)。詳細は、[** Lookarounds **](http://www.regular-expressions.info/lookaround.html)を参照してください。 –

+0

ありがとうございます。素晴らしい助け! – ben

2

負ルックの背後にある代わりに使用します。

(?<!C\(=O\))N 

See this regex101 exampleを。

よろしくお願いいたします。

関連する問題