正则表达式之间替换引号

时间:2010-03-23 11:35:31

标签: c# .net regex

我想知道从哪里开始在正则表达式中执行以下替换:

  1. 读取文件(.cs文件)
  2. 使用大写版本("e.g:"
  3. 替换引号("E.G:")之间的任何内容

    以示例:

    string m = "stringishere";
    

    变为

    string m = "STRINGISHERE";
    

    提前致谢,

    凯尔

3 个答案:

答案 0 :(得分:2)

您的问题中未说明,因此我将为单行报价提供可能的解决方案:

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 内部包含奇数",则会爆炸。 :)

答案 1 :(得分:2)

由于.cs文件可能包含

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

你所要求的将是很难与Regex。

答案 2 :(得分:0)

假设你的字符串里面没有"

Regex r = new Regex('"[^"]+"');
string output = r.Replace(input,m=>m.Groups[0].ToUpper());