Используйте C # регулярное выражение, чтобы преобразовать регистр в строку - PullRequest
3 голосов
/ 09 мая 2009

как я могу преобразовать эту строку:

bKk_035A_paint-House_V003
до
BKK_035a_paint-House_v003

с регулярным выражением (например, Regex.Replace)?
Это регулярное выражение соответствует строке:

^(?<Group1>[a-z][a-z0-9]{1,2})_(?<Group2>\d{3}[a-z]{0,2})_(?<Group3>[a-z-]+)_(?<Group4>v\d{3,5})$
  • Group1 = прописные буквы
  • Group2 = строчные буквы
  • Group3 = без изменений
  • Group4 = строчные буквы

Спасибо за любую помощь,
Patrick

Ответы [ 3 ]

5 голосов
/ 09 мая 2009

регулярное выражение не соответствует первой строке ...

Полагаю, вы хотите, чтобы первые 3 символа были прописными, а остальные строчными?

вот первый проход:

const string mod = @"^([a-z][a-z0-9]{1,2})(_\d{3}[a-z]{0,2}_[a-z]+_v{1}\d{3,5})$";
var converted = 
    new Regex(mod, RegexOptions.IgnoreCase)
        .Replace(input1, 
            m => string.Format(
                   "{0}_{1}",
                   m.Groups[1].ToString().ToUpper(),
                   m.Groups[2].ToString().ToLower()
                 )
                );
4 голосов
/ 09 мая 2009

Другая альтернатива с использованием методов Split и Join.

    const string input = "bKk_035A_paint-House_V003";
    string[] strParts = input.Split('_');
    strParts[0] = strParts[0].ToUpperInvariant();
    strParts[1] = strParts[1].ToLowerInvariant();
    strParts[3] = strParts[3].ToLowerInvariant();
    string result = String.Join("_", strParts);
0 голосов
/ 09 мая 2009

Финальный код, который я использовал

string input = "lAl_058a_068b_COMP_dsj_V001.txt";
string regex = @"^(?<Group1>[a-z][a-z0-9]{1,2})_(?<Group2>\d{3}[a-z]{0,2})_(?<Group3>[a-z-]+)_(?<Group4>v\d{3,5})$";

StringBuilder sb = new StringBuilder(input);
Match m = Regex.Match(input, regex, RegexOptions.IgnoreCase | RegexOptions.Multiline);
if (m.Success)
{
    Group g;
    g = m.Groups["Group1"];
    sb.Replace(g.Value, g.Value.ToUpper(), g.Index, g.Length);
    g = m.Groups["Group2"];
    sb.Replace(g.Value, g.Value.ToLower(), g.Index, g.Length);
    g = m.Groups["Group4"];
    sb.Replace(g.Value, g.Value.ToLower(), g.Index, g.Length);
}

Спасибо за все ваши комментарии, Patrick

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