Regex Заменить между цитатами - PullRequest
0 голосов
/ 23 марта 2010

Мне интересно, с чего начать выполнение следующей замены в регулярном выражении:

  1. Чтение файла (файл .cs)
  2. Заменить что-либо между кавычками ("e.g:") наего заглавная версия ("E.G:")

Например:

string m = "stringishere";

Становится

string m = "STRINGISHERE";

Заранее спасибо,

Кайл

Ответы [ 3 ]

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

Это не указано в вашем вопросе, поэтому я предоставлю возможное решение для однострочных цитат:

public static void Main(string[] args)
{
    const string MatchQuotedExp = @"(\x22|\x27)((?!\1).|\1{2})*\1";

    Regex regex = new Regex(MatchQuotedExp);

    string input = @"""Foo"" Bar ""Foo"" Bar ""Foo""!
        ""Bar"" Foo ""Bar"" Foo ""Bar""!";

    foreach (Match match in regex.Matches(input))
    {
        input = Regex.Replace(
            input, 
            match.Value, 
            match.Value.ToUpperInvariant());
    }

    Console.WriteLine(input);
}

Для поддержки многострочных цитат добавьте RegexOptions.Singleline при создании regex.

При поддержке нескольких строк вход:

// "Foo" Bar "Foo" Bar "Foo"!
// "Bar" Foo "Bar" Foo "Bar"! "Multi
// line" blah

будет преобразован в:

// "FOO" Bar "FOO" Bar "FOO"!
// "BAR" Foo "BAR" Foo "BAR"! "MULTI
// LINE" blah

Также обратите внимание, что это взорвется, если ANY цитат содержат нечетное число " внутри.:)

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

Так как файл .cs может содержать комментарии типа

 // Look, lonely double quote: " Take that, Regex parser! 

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

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

При условии, что в вашей строке нет " внутри.

Regex r = new Regex('"[^"]+"');
string output = r.Replace(input,m=>m.Groups[0].ToUpper());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...