Как заменить реальный символ звездочки (*) в выражении Regex? - PullRequest
12 голосов
/ 10 мая 2010

У меня есть заявление:

У меня есть строка, такая как

content = "*   test    *"

Я хочу найти и заменить его, поэтому, когда я закончу, строка содержит это:

content = "(*)   test    (*)"

Мой код:

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

Но это вызывает ошибку в C #, потому что он думает, что * является частью синтаксиса регулярных выражений.

Как я могу изменить этот код, чтобы вместо него все звездочки в моей строке заменялись на (*), не вызывая ошибки времени выполнения?

Ответы [ 5 ]

30 голосов
/ 10 мая 2010

Поскольку * является метасимволом регулярных выражений, когда вам нужно использовать его как буквальную звездочку вне определения класса символов, его необходимо экранировать с \ до \*.

В C # вы можете написать это как "\\*" или @"\*".

C # также должен иметь метод "цитирования" общего назначения, чтобы вы могли заключать в кавычки произвольную строку и сопоставлять ее как литерал.

Смотри также

10 голосов
/ 10 мая 2010

Вам не нужно регулярное выражение в этом простом сценарии. Вы можете использовать String.Replace:

content = content.Replace("*", "(*)");
10 голосов
/ 10 мая 2010

Вы можете избежать этого:

\*

4 голосов
/ 10 мая 2010

Использовать Regex.Escape() Он возьмет всю строку и превратит ее в то, что вы можете использовать как часть регулярного выражения.

4 голосов
/ 10 мая 2010

Используйте \\* вместо * в regex.replace call

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...