Regex заменяет все нечисловые символы, кроме определенных шаблонов символов - PullRequest
1 голос
/ 27 октября 2019

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

Например, я пытаюсь:

string str = "The sky is blue 323.05 lnp days of the year";

str = Regex.Replace(str, "(^blue|lnp|days)[^.0-9]", "", RegexOptions.IgnoreCase);

Я хотел бы, чтобы он возвратил:

"blue 323.05 lnp days"

, но я не могу понять, как сделать так, чтобы он соответствовал всему шаблону символов в выражении.

1 Ответ

0 голосов
/ 28 октября 2019

Я бы предложил захватить то, что вам нужно сохранить, и просто сопоставить то, что вам нужно удалить:

var result = Regex.Replace(text, @"(\s*\b(?:blue|lnp|days)\b\s*)|[^.0-9]", "$1").Trim();

См. Демонстрационную версию regex . Обратите внимание, что возможные начальные / конечные пробелы будут обрезаны с помощью .Trim().

Регулярное выражение означает:

  • (\s*\b(?:blue|lnp|days)\b\s*) - Группа 1 ($1):
    • \s* - 0+ пробелов
    • \b(?:blue|lnp|days)\b - одно из трех слов как целых слов
    • \s* - 0+ пробелов
  • | - или
  • [^.0-9] - любой символ, кроме . и цифры ASCII.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...