0

正規表現を使用していくつかの問題が発生しています。助けてもらえますか?私が解決しようとしている問題の以下 -

入力: :,... :D..:::))今日のお元気ですか :P?..:(*

出力 :D :) :P :(

基本的に、(.,:; など) のような入力文字列から句読点とテキストを削除し、それらを空の文字列に置き換えたいと考えています。しかし、スマイリーを維持したい -:) ,:( または :P 。次のコードを作成しましたが、機能していません。

正規表現= "[A-Za-z]|:[D(P(]"

ただし、「:D および :P」スマイリーも削除されます。

4

2 に答える 2

2

次の正規表現文字列が機能するはずです。

(((?<!:)[^:])|(:(?![PD\(\)])))[^:]*

次の 2 つの部分で構成されています。

  1. ( ((?<!:)[^:]) | (:(?![PD\(\)])))
  2. [^:]*

最初の部分は、否定先読みと後読みを使用する OR( |) ステートメントです。次のいずれかを探して、スマイリーを含まないテキスト ブロック内の最初の文字を見つけます。

明らかにスマイリーではないキャラクター:

  1. コロンが前にない任意の文字:(?<!:)
  2. コロン自体ではありません。[^:]

または、スマイリー文字が続かないコロン:

  1. コロン:
  2. その後に、スマイリーの後半の文字が続きません。(?![PD\(\)]))

2 番目の部分 ( [^:]*) は、可能性のあるスマイリー (コロン) の始まりが見つかるまで検索を続けます。

この正規表現は現在、次のスマイリーのみを検出します。

  • :D
  • :P
  • :(
  • :)

OR ステートメントの後半を更新して、他のスマイリーを見つけることができます。

要約すると、この正規表現は、スマイリーの一部ではないすべてを検出する必要があります。単純にRegex変数で宣言してから を呼び出し.Replace(string input, string replacement)、入力文字列と非スマイリー文字を置き換える文字列 (String.Emptyこの場合) を渡します。

于 2013-04-16T12:45:19.273 に答える