Как действительно заменяют Каждую Прописную букву Подчеркиванием и Буквой в C#?примечание: если символ уже не продолжен подчеркиванием.
ОБНОВЛЕНИЕ: Например, MikeJones
был бы превращен
Mike_Jones
Но Mike_Jones
не был бы превращен
Mike __ Jones
Действительно ли Regex является лучшим подходом? Где я запускаю с этого?
Regex звучит лучше всего:
string input = "Test_StringForYou";
string replaced = Regex.Replace(input, @"(?<!_)([A-Z])", "_$1");
Console.WriteLine(replaced);
Output: _Test_String_For_You
Не забудьте добавить using System.Text.RegularExpressions;
Regex.Replace(subject, "([A-Z])", "_$1");
меняет The Quick Brown Fox на _The _Quick _Brown _Fox
Это то, что вам нужно?
Если вы хотите преобразовать это:
Образец текста
в
_sample _text
Тогда нет, RegEx не будет строго этого делать, поскольку вы не можете преобразовывать захваченные изображения или группы в выражение замены. Вы, конечно, можете использовать ответ Джейка и добавить в конец вызов .ToLower ()
, который заменит все заглавные буквы строчными буквами.
Если все, что вам нужно, это добавить подчеркивание к каждой заглавной букве, у которой его еще нет, то ответ Джейка должен помочь.
Таким образом, вы не хотите изменять регистр букв ! Я знаю, что вы не говорили, что говорили, но некоторые из нас предполагали это, потому что этот вопрос возникает очень часто. В этом случае это регулярное выражение - все, что вам нужно:
s = Regex.Replace(s, @"(?<=[a-z])([A-Z])", @"_$1");
Выполнение положительного просмотра назад для строчной буквы также гарантирует, что вы не добавите подчеркивание в начало строки.
using System.Text.RegularExpressions;
//-----------------------------------------------------------------
string str = Regex.Replace("MyString", @"([A-Z])", " $1").Trim();
//-----------------------------------------------------------------
str givs "My String"
Отлично работает