次の正規表現文字列が機能するはずです。
(((?<!:)[^:])|(:(?![PD\(\)])))[^:]*
次の 2 つの部分で構成されています。
- (
((?<!:)[^:])
| (:(?![PD\(\)]))
)
[^:]*
最初の部分は、否定先読みと後読みを使用する OR( |
) ステートメントです。次のいずれかを探して、スマイリーを含まないテキスト ブロック内の最初の文字を見つけます。
明らかにスマイリーではないキャラクター:
- コロンが前にない任意の文字:
(?<!:)
- コロン自体ではありません。
[^:]
または、スマイリー文字が続かないコロン:
- コロン
:
- その後に、スマイリーの後半の文字が続きません。
(?![PD\(\)]))
2 番目の部分 ( [^:]*
) は、可能性のあるスマイリー (コロン) の始まりが見つかるまで検索を続けます。
この正規表現は現在、次のスマイリーのみを検出します。
OR ステートメントの後半を更新して、他のスマイリーを見つけることができます。
要約すると、この正規表現は、スマイリーの一部ではないすべてを検出する必要があります。単純にRegex
変数で宣言してから を呼び出し.Replace(string input, string replacement)
、入力文字列と非スマイリー文字を置き換える文字列 (String.Empty
この場合) を渡します。