web-dev-qa-db-ja.com

正規表現の実際のアスタリスク文字(*)を置き換えるにはどうすればよいですか?

私は声明を持っています:

私は次のような文字列を持っています

content = "*   test    *"

検索して置き換えたいので、完了すると文字列に次の文字列が含まれます。

content = "(*)   test    (*)"

私のコードは:

content = Regex.Replace(content, "*", "(*)");

ただし、*は正規表現構文の一部であると見なされるため、C#でエラーが発生します。

ランタイムエラーを発生させずに、文字列内のすべてのアスタリスクを代わりに(*)に変更するように、このコードを変更するにはどうすればよいですか?

14
fraXis

*は正規表現メタ文字であるため、文字クラス定義の外でリテラルアスタリスクとして必要な場合は、\から\*でエスケープする必要があります。

C#では、これを"\\*"または@"\*"と書くことができます。

C#には、任意の文字列を引用してリテラルとして照合できるように、汎用の「引用」メソッドも必要です。

も参照してください

30

あなたはそれを逃れることができます:

\*

10

この単純なシナリオでは、正規表現は必要ありません。 String.Replaceを使用できます:

content = content.Replace("*", "(*)");
10
Kobi

使用する \\*regex.replace呼び出しで*の代わりに

4
Midhat

Regex.Escape()を使用します。すべての文字列を取得して、正規表現の一部として使用できるものにします。

4
Cine