2017-01-09 5 views
2

特殊な条件を除外する際に問題があります。私はすでにLINKの例を作成しています。正規表現:条件のときに文字列内の単語の一致を避ける方法

私はこのような文のリストがある場合:

X-MAS TREE //it should be excluded because match my dictionary 
BLA BLA TREE 
XMAS TREE 
X-MASTREE 
X-TREE 
X-MASTREE 

をそして私はXMAS TREEは同義語持っている辞書を持っている:XMAS TREE、X-MASTREE、X-TREE、TREEを。そして私はすべての同義語を私の辞書の単語に変更する必要があります。

除外方法X-MAS TREEX-MAS TREEが既にTREE

Iを持っているので、私はキーワードTREEで検索する場合は、これらの正規表現のすべてなので、X-MASとTREE を交換します 、それは、無限ループになります多くの組み合わせを試してみましたが、動作していない:

\b(XMAS TREE|X\-MASTREE|X\-TREE|TREE|(?!X\-MAS TREE)\b 
\b(XMAS TREE|X\-MASTREE|X\-TREE|(?!X\-MAS \s)TREE)\b 
\b(XMAS TREE|X\-MASTREE|X\-TREE|((?!X\-MAS)|\w*)TREE)\b 
\b(XMAS TREE|X\-MASTREE|X\-TREE|(?:(?!X\-MAS))TREE)\b 

EDIT

私は自分のコードでループを使って正規表現を作成し、別の辞書に使用する必要があるため、境界を使用する必要があります(何らかの理由で)。コード、唯一のあなたはこれを試すことができ

+0

不要なケースをすべてルックアヘッドとして表示することはありますか? (?<!X \ -MAS)(?<!X \ - )\ b(?<!XMAS \ s)(?<!X \ -MAS \ s)TREE \ b'](https://regex101.com/r/6pL1ul/1)。あるいは、ブラックリストに載っているすべての 'X-'を削除し、 'TREE'を必要な文字列に置き換えるという2つのステップで行います。 –

+0

最初の3つの正規表現、私はそれを除外する必要があるX-MAS TREEだけが必要です。もう一つは正しい。 –

+0

お試しください: ['/^([^X].+|X[^-].+|X-[^M].+|XM[^A].+|X-MA[^S ] | + | X-MAS [^]。+ | X-MAS TRE [^ T]。+ | X-MAS T [^E] +)/ gm'](http://regexr.com/3f17o) – Faibbus

答えて

1

あなたはX-MASで先行していない単語全体TREEと空白を一致させたい場合は、(X-MASは単語全体、(?<!\\bX-MAS\\s)であることを確認するために、または)負の後読み(?<!X-MAS\\s)を使用することがあります。

String pat = "\\b(?<!X-MAS\\s)TREE\\b"; 

regex demoを参照してください。1から10までの、たとえば、1つの以上の空白があることができれば、あなたは必ず1つの以上の空白がまだ計上されていることを確認するために\s制限数量詞{1,10}を追加することができます。また

、:

String pat = "\\b(?<!X-MAS\\s{1,10})TREE\\b"; 

ここで、X-MASTREEの間に空白または空白がない場合でも、負の条件(いわゆるconstrained-width negative lookbehind)が有効です。

this Java demoを参照してください。

2

正規表現TREE)を編集します。

^(?!X-MAS\s+TREE\s*)(?=.*TREE).*$ 

Explanation

  1. は^行の先頭に位置をアサート
  2. 否定先読み(?!X-MAS\s+TREE\s*)
  3. \ S +は、任意の空白文字と一致する(等しい[\ Rを\ n \ T \ F \ V])マッチ以下正規表現。*は
  4. $は位置をアサートすること
  5. 肯定先読み(?=.*TREE)アサートあなたのコメントの構造をカバーするために

行の最後には、あなたは

\b.*(?<!X-MAS)TREE\b 

の後ろに負の外観を試すことができます210

+0

何らかの理由で自分の構造を変更できないので、私は自分の構造コードを使用する必要があります。将来の必要がなくても私のケースを試すと、この回答は適切に機能します。 –

+0

詳細を教えてください。構造コードはどういう意味ですか? –

+0

"\ b(単語|単語|単語| ... |単語)\ b"私はこの種の構造を使用しています –

関連する問題