2009-05-30 1 views
1

私はRegexをC#で使用して、一連のテキストの中のキーワードのリストを探しています。しかし、私は、キーワードとして数えるために何かのために "周囲の"テキストが何であるかについて非常に具体的になりたいです。正規表現のキーワード

たとえば、キーワード「hello」は(hello)、hello。、hello <にありますが、hellothereでは見つからないはずです。

私の主な問題は、キーワードが最初の単語または最後の単語であれば、セパレータが必要であるということです。私はそれを見る別の方法は、ファイルの始めとファイルの終わりが受け入れ可能なセパレータでなければならないということです。

私はRegexに新しくなったので、誰かがパターンを正しく手助けできるようになることを願っていました。これまでのところ私が持っている:

<は、(もちろん私が探しているキーワードいくつかの例のセパレータとキーワードをされている
[ <(.]+?keyword[<(.]+? 

私はあなたが欲しいと思う事前

答えて

-1

感謝。何かのように:

(^$|[ <(.])+?keyword($|[<(.]+?) 

^$文字は、それぞれ、入力されたテキストの開始と終了を象徴(あれば。あなたはそれがテキストではなく行の先頭/末尾にマッチし、Multilineオプションを指定しますが、Singlelineオプションをしたいように思われる。)

+0

シングルラインで '。' (ドット)メタキャラクタマッチラインセパレータ文字(\ rと\ n);この正規表現には何の効果もありません。なぜなら、唯一のドットが文字クラスにあり、ドットと一致するからです。 –

+0

@Alan:私の主張は、単線/複数行オプションは、 '。'ではなく '^'と '$'の意味を変更することだけでした。質問は、OPが特にセパレータとして '。'を検出したいと述べています。 – Noldorin

+0

単一のトグル設定の反対の状態としてSinglelineとMultilineを考えているようですね。名前はそれほど意味するようですが、実際には完全に独立しています。シングルラインは '。'の意味を変更します。 Multilineは '^'と '$'の意味を変更します。 "Singleline"はいつも不幸な名前でした。いくつかのフレーバーはそれをDOTALLモードと呼びますが、これははるかに説明的です。 –

0

あなたはword boundary(\ b)は避けるようにマッチングに見たいと思うだろう別の単語の一部として表示されるキーワード(あなたのhellothereの例のように)。

行頭(^)と行末($)に一致を追加して、キーワードの表示位置を制御することもできます。

3

あなたはword boundaryアンカー使用することができます

\bkeyword\b 

だけ大きな単語の一部ではないキーワードを見つけるだろう。