Регулярное выражение .Net заменяет отдельные символы, за которыми следуют пробелы в начале строки - PullRequest
2 голосов
/ 25 марта 2010

Мне нужно заменить "x y z word1 word2" на "x_y_z word1 word2"
Количество отдельных символов может варьироваться.

Ответы [ 2 ]

5 голосов
/ 25 марта 2010

Этого можно добиться, злоупотребив lookahed:

Regex.Replace(str, @"(?<=^\w?(\s\w)*)\s(?=\w\s)", "_");

Находит пробелы после последовательности пробелов и одиночных букв и перед другой такой буквой. Обратите внимание, что это не будет работать на всех вкусах Regex, но .net справляется с этим хорошо.

Другой вариант - использование MatchEvaluator:

Regex.Replace(str, @"^(\w )+",
              match => match.Value.TrimEnd().Replace(' ', '_') + " ");

В этой версии регулярное выражение легко, но мы делаем некоторую постобработку - функция удаляет последний пробел и заменяет все остальные пробелы подчеркиванием.

5 голосов
/ 25 марта 2010
Regex.Replace(yourstring, "^x y z ", "x_y_z ")

сделал бы это, конечно. То, сколько вы хотите обобщить, зависит от того, какие именно «символы, за которыми следуют пробелы», которые вы хотите заменить (учитывая, что вы не хотите заменять word1 и более поздние строки примера); например, если вы хотите заменить ровно три односимвольных идентификатора (за которыми следуют пробелы) в начале строки, правильное обобщение:

Regex.Replace(yourstring, "^([a-z]) ([a-z]) ([a-z]) ", "$1_$2_$3 ")

но все по-другому, если вы хотите заменить разное количество идентификаторов или идентификаторов разной длины и т. Д. И т. Д. Скажите нам точно, что вы хотите заменить (и где вы хотите прекратить замену), и мы можем быть более конкретными в наши предложения.

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