2017-10-03 16 views
-2

"Attributable"を見つけるRegexが必要です。 @"\bAttributable\b"を試しましたが、\ b境界は特殊文字では機能しません。C#特殊文字を含む正規表現の境界

たとえば、「Attributable」と「Non-Attributable」を区別しません。 Regexにはのアトリビュートのための方法はありますか?

+1

文字列の空白/開始点/終了点の間の単語だけを検索したい場合は、 '@"(?<!\ S)Attributable(?!\ S) "'を試してください。実際には、あなたが望むものなら、 's.Split()。Contains(" Attributable ")'を使って正規表現なしで行うことができます。 –

+0

ひとつの '(?<! - )'が必要ですか? –

答えて

2

否定的なルックバックがありますか?

(?<!-)\bAttributable\b 

これは明らかに-をチェックします。あなたは、他の文字をチェックネガティブルックの後ろに文字クラスに入れたい場合は:あなただけNon-Attributableに一致するが、試合SomethingElse-Attributableをしないしたい場合は、代わりに

(?<![-^])\bAttributable\b 

、ルックにNon-を置きます-behind:

(?<!Non-)\bAttributable\b 
+0

動作していますが、私が作ろうとしているものではありません。どんな特殊文字なのかにかかわらず、 "Attributable"自体を検索したいのです –

+1

@JarrenOng "それ自身"をどう定義していますか?コンピュータは私たちのようなものではなく、「見ているだけで」「それ自体が「帰属可能」」かどうかを知ることができます。空白の手段で囲まれたようなルールを作る必要があります。だからこれを決めるためのあなたのルールは何ですか? – Sweeper

+0

うーん、それは意味をなさない。私はそれが空白以外の文字の境界を持つ "Attributable"であることを望んでいました。しかし/。ハイフンでは機能しません。 [^ - ] \ bAttributable \ b worksありがとう –

1

問題を解決するにはいくつかの方法がありますが、すべてが実際の要件に依存しています。

  • \b word boundary 1)文脈依存しているので、あなたは、それぞれの具体的な場合には必要とし、2)あなたが知っておくべき文字列内の特定の場所に一致するものを「単語の境界」時には、正確に必要です文字列の最初の文字の前に、最初の文字が の単語文字である場合。
  • 文字列の最後の文字の後に、最後の 文字が単語文字の場合。
  • 文字列内の2文字の間に、 があります。一方は単語文字で、もう一方は単語文字ではありません。今

、ここにあなたが従うことができるいくつかのアプローチです:あなたが唯一の通常ハイフン(似た@Sweeper's answer)に参加しました複合語を気にすると

関連する問題