2016-09-01 7 views
0

Regexは正しいツールではない可能性があります。RegExを使用して、NonLetter文字で区切られていても特定の単語を見つける

文字以外の文字で分割されていても検索したいと思っています。たとえば、Oneを検索しようとしている場合、O-neは一致しますが、--O__n--eは一致しますが、O--nceは一致しません。

XY問題を回避するには:これは、冒涜フィルタの単語を一致させるためのものです。このケースが出て、String.toLowerString.IndexofおよびString.Replaceを使用してすべての非文字を削除し、単語を*に置き換えてから元の文字列を再構成する(かなり長い)解決策があります。私は正規表現を使って解決策を見つけようとしていました。ここで私はこれまで試したものです:

(.\*)(([^a-zA-Z]*)(?i)(Y)([^a-zA-Z]*)(?i)(e)([^a-zA-Z]*)(?i)(s)([^a-zA-Z]*)\b)(.\*) 

それはI wasn't born --Y_e--sはなく、I wasn't born --Y_e--stのようなものと一致しました。

は、だから私はこれまで、それを変更する、(貪欲どんな毎回文字列全体にマッチしていない)のコース始まり(.*)オプション--Y_e--s部分を作るために\b?を追加しました:

(.\*?)(([^a-zA-Z]*)(?i)(Y)([^a-zA-Z]*)(?i)(e)([^a-zA-Z]*)(?i)(s)([^a-zA-Z]*)\b)?(.\*?) 

をどの何も一致しません。

私は困惑しています。私が欲しいのはこれです:

(Capture Group start of string) (Capture group of my Target word that might be separated by non Letter characters) (Capture Group of End of string). 

答えて

1

よくある正規表現のフレーバーを使っていますが、これを試すことができます。このテキスト

I wasn't born --Y_e--s 
に対する

https://regex101.com/r/qR1aP5/1

(\S)\s*(\S+)(\S)\s*(\S+)(\S)\s*(\S+) 

マッチ

関連する問題