С# - Заменить каждое письмо верхнего уровня с помощью подчеркивания и буквы
Как заменить каждое письмо верхнего уровня на поддерево и букву на С#?
примечание: если символ уже не выполняется символом подчеркивания.
UPDATE:
Например,
MikeJones
превратится в
Mike_Jones
Но Mike_Jones
не будет превращен в
Mike__Jones
Является ли Regex лучшим подходом? С чего начать с этого?
Ответы
Ответ 1
Лучшее звуковое выражение:
string input = "Test_StringForYou";
string replaced = Regex.Replace(input, @"(?<!_)([A-Z])", "_$1");
Console.WriteLine(replaced);
Выход: _Test_String_For_You
Обязательно добавьте using System.Text.RegularExpressions;
Ответ 2
Итак, вы не хотите менять регистр букв! Я знаю, что вы этого не сказали, но некоторые из нас это поняли, потому что этот вопрос возникает так часто. В этом случае это регулярное выражение все, что вам нужно:
s = Regex.Replace(s, @"(?<=[a-z])([A-Z])", @"_$1");
Выполнение положительного lookbehind для строчной буквы также гарантирует, что вы не добавляете подчеркивание к началу строки.
Ответ 3
Regex.Replace(subject, "([A-Z])", "_$1");
изменяет Quick Brown Fox на _Quick _Brown _Fox
Это то, что вам нужно?
Ответ 4
Если вы хотите преобразовать это:
Пример текста
В
_sample _text
Тогда нет, RegEx не будет строго делать это, поскольку вы не можете преобразовать захваты или группы в замещающее выражение. Вы могли бы, конечно, использовать ответ Джейка и добавить к концу вызов .ToLower()
, который заменит все заглавные буквы строчными буквами.
Если все, что вам нужно сделать, это добавить символ подчеркивания к каждой заглавной букве, которая его еще не имеет, то ответ Джейка в одиночку должен сделать трюк.
Ответ 5
using System.Text.RegularExpressions;
//-----------------------------------------------------------------
string str = Regex.Replace("MyString", @"([A-Z])", " $1").Trim();
//-----------------------------------------------------------------
str givs "My String"
Работает хорошо
Ответ 6
Не знаю, насколько это актуально, но вот простой способ сделать это.
private string StripInput(string input)
{
var output = input
.Replace(" ", "_")
.ToLower().Trim();
return output;
}
string TEST = "Hello World";
litTest.Text = StripInput(TEST);
Появится как: hello_world