C # - заменить каждую заглавную букву подчеркиванием и буквой - PullRequest
16 голосов
/ 08 марта 2010

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

UPDATE: Например, MikeJones
будет превращен в
Mike_Jones

Но Mike_Jones
не будет превращен в
Mike__Jones

Является ли Regex лучшим подходом? С чего начать с этого?

Ответы [ 6 ]

29 голосов
/ 08 марта 2010

Regex звучит лучше всего:

string input = "Test_StringForYou";
string replaced = Regex.Replace(input, @"(?<!_)([A-Z])", "_$1");
Console.WriteLine(replaced);

Вывод: _Test_String_For_You

Обязательно добавьте using System.Text.RegularExpressions;

2 голосов
/ 10 марта 2010

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

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

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

1 голос
/ 08 марта 2010
Regex.Replace(subject, "([A-Z])", "_$1");

меняет «Быстрая коричневая лиса» на _Quick _Brown _Fox

Это то, что тебе нужно?

0 голосов
/ 02 марта 2011

Не знаю, подходит ли это все еще, но вот простой способ сделать это.

private string StripInput(string input)
    {
        var output = input
            .Replace(" ", "_")
            .ToLower().Trim();
        return output;
    }

string TEST = "Hello World";
    litTest.Text = StripInput(TEST);

выйдет как: hello_world

0 голосов
/ 04 июля 2010
using System.Text.RegularExpressions;

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

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

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

str givs "My String"

Хорошо работает

0 голосов
/ 08 марта 2010

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

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

В

_sample _text

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

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

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