C# - Замените каждую прописную букву подчеркиванием и буквой

Как действительно заменяют Каждую Прописную букву Подчеркиванием и Буквой в C#?примечание: если символ уже не продолжен подчеркиванием.

ОБНОВЛЕНИЕ: Например, MikeJones
был бы превращен
Mike_Jones

Но Mike_Jones
не был бы превращен
Mike __ Jones

Действительно ли Regex является лучшим подходом? Где я запускаю с этого?

16
задан BuddyJoe 10 March 2010 в 13:28
поделиться

5 ответов

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;

30
ответ дан 30 November 2019 в 17:15
поделиться
Regex.Replace(subject, "([A-Z])", "_$1");

меняет The Quick Brown Fox на _The _Quick _Brown _Fox

Это то, что вам нужно?

1
ответ дан 30 November 2019 в 17:15
поделиться

Если вы хотите преобразовать это:

Образец текста

в

_sample _text

Тогда нет, RegEx не будет строго этого делать, поскольку вы не можете преобразовывать захваченные изображения или группы в выражение замены. Вы, конечно, можете использовать ответ Джейка и добавить в конец вызов .ToLower () , который заменит все заглавные буквы строчными буквами.

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

0
ответ дан 30 November 2019 в 17:15
поделиться

Таким образом, вы не хотите изменять регистр букв ! Я знаю, что вы не говорили, что говорили, но некоторые из нас предполагали это, потому что этот вопрос возникает очень часто. В этом случае это регулярное выражение - все, что вам нужно:

s = Regex.Replace(s, @"(?<=[a-z])([A-Z])", @"_$1");

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

2
ответ дан 30 November 2019 в 17:15
поделиться
using System.Text.RegularExpressions;

//-----------------------------------------------------------------

string str = Regex.Replace("MyString", @"([A-Z])", " $1").Trim();

//-----------------------------------------------------------------

str givs "My String"

Отлично работает

0
ответ дан 30 November 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: