.Net, что означает новый Regex (@ "[] {2,}", options) - PullRequest
2 голосов
/ 07 июля 2010

Что происходит в этом фрагменте кода?

    RegexOptions options = RegexOptions.None;
    Regex regex = new Regex(@"[ ]{2,}", options);
    string outStr = regex.Replace(inStr, @" ");

Я ищу замену любых последовательностей «пробелов» (включая TAB, CR, LF) одним пробелом.

Ответы [ 4 ]

3 голосов
/ 07 июля 2010

[ ] обозначает группу символов (в этом случае только один пробел) {2,} означает «как минимум 2 раза»

так, этот код заменяет несколько вхождений пробела на один

, который гораздо проще написать (и прочитать) как: " +" (один или несколько пробелов), а затем заменить их на один (не должен быть медленнее в конце концов)

3 голосов
/ 07 июля 2010

Давайте разберемся:

[ ]          <-- matches a single space
{2,}         <-- previous token is repeated 2 or more times

Так что это будет соответствовать 2 или более последовательных пробелов.

Затем вызов .Replace заменит эти последовательности из 2 или более пробелов только одним пробелом.

2 голосов
/ 07 июля 2010

@ - дословно строковый литерал;символы не интерпретируются до следующей цитаты

[] - в этих скобках мы указываем, разрешены или нет символы.Это ([]) любой пробел, возможно, что автор хотел использовать заменить только пробел, но для этого следует использовать шаблон \ s

{2,} - как минимум два раза

ВозможноRegex пришлось удалить двойные пробелы

2 голосов
/ 07 июля 2010

Эта строка:

Regex regex = new Regex(@"[ ]{2,}", options);

Создает объект регулярного выражения, который будет искать вхождения 2 или более смежных пробелов. [ ] создает группу символов, которая содержит пробел - она ​​могла бы быть написана как , но тогда я бы предположил, что она будет менее читаемой {2,} означает 2 или более (неограниченных) предыдущего символа (или группы символов).

См. этот удобный шпаргалка RegEx для синтаксиса регулярных выражений .NET.

Эта строка находит все такие вхождения и заменяет их одним пробелом:

string outStr = regex.Replace(inStr, @" ");

Функция замены находит все совпадения регулярного выражения в первом строковом параметре и заменяет их второй строкой.

В обоих случаях нет необходимости в буквальном строковом литерале (начиная с @).

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