4

文字または数字のみで囲まれたすべての記号を置き換えるには、正規表現が必要です。スペースを入れて、C#を使用して式を実行し、正規表現部分に貼り付けられた部分で問題ありません。

したがって、交換後は次のようになります

  1. Type-01Type01になります
  2. 01)*は01) *のままです
  3. -Category:Toysは引き続き-Category:Toys
  4. 白:背中白黒になります

現在の式

(?<=\w)[^a-zA-Z0-9Category:]+(?=\w)

入力文字列は

-カテゴリ:おもちゃAND(テディベアタイプ-01 *)または(テディベアホワイト:ブラック)

必要な出力

-カテゴリ:おもちゃAND(テディベアタイプ01 *)または(テディベアホワイトブラック)

しかし、私が得ているのは

-カテゴリ:おもちゃとテディベアタイプ01またはテディベア白:黒)

単純なものが欠けているだけなのか、スティックの端が間違っているだけなのかわからない

4

2 に答える 2

2

文字クラスに単語を入れることはできません。そこにあるすべての文字がそのクラスに追加されます。順序は関係ありません。

それがあなたにとって十分かどうかはわかりませんが、あなたの例ではこれでうまくいきます:

(?<=\w)[^a-zA-Z0-9*:()\s]+(?=\w)

単一のスペースに置き換えます。

私もそれをよりUnicodeスタイルにします:

(?<=\w)[^\p{L}0-9*:()\s]+(?=\w)

\p{L}任意の言語の文字の Unicode プロパティはどこにありますか。

ここでRegexrを参照してください

アップデート:

前に「カテゴリ」がある場合にコロンを保持したい場合は、このようにすることができます

(?<=\w)(?:[^a-zA-Z0-9*()\s:]+|(?<!Category):)(?=\w)

正規表現で見る

コロンを置換しないように、否定文字クラスにコロンを追加しました。次に、次のように言う代替案を追加しました。コロンを置き換えますが、前に「カテゴリ」がない場合のみです。

于 2012-10-15T09:56:36.723 に答える
0

C#の場合、Regex.Replace関数を使用できます。

string a = "Category:Toys AND (Teddy Bear Type-01*) OR (Teddy Bear White/Black)";
string s = string.Empty;
s = Regex.Replace(a, @"[^()*:A-Za-z0-9]", " ");
于 2012-10-15T09:55:24.557 に答える