C# Regex在报价之间替换

C# Regex在报价之间替换,c#,.net,regex,C#,.net,Regex,我想知道从哪里开始在regex中执行以下替换: 读取文件(.cs文件) 将引号(”例如:“)之间的任何内容替换为大写版本(”例如:“) 举例来说: string m = "stringishere"; 变成 string m = "STRINGISHERE"; 提前感谢, Kyle假设字符串中没有“ Regex r = new Regex('"[^"]+"'); string output = r.Replace(input,m=>m.Groups[0].ToUpper()); 假设

我想知道从哪里开始在regex中执行以下替换:

  • 读取文件(.cs文件)
  • 将引号(
    ”例如:“
    )之间的任何内容替换为大写版本(
    ”例如:“
  • 举例来说:

    string m = "stringishere";
    
    变成

    string m = "STRINGISHERE";
    
    提前感谢,


    Kyle

    假设字符串中没有

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

    假设字符串中没有

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

    您的问题中没有说明,因此我将为单线报价提供一个可能的解决方案:

    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);
    }
    
    对于多行报价支持,请在创建
    regex
    时添加
    RegexOptions.Singleline

    通过多行支持,输入:

    // "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
    

    另外请注意,如果任何报价单中包含奇数个
    ”。

    您的问题中没有说明这一点,因此我将为单行报价单提供一个可能的解决方案:

    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);
    }
    
    对于多行报价支持,请在创建
    regex
    时添加
    RegexOptions.Singleline

    通过多行支持,输入:

    // "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
    

    还要注意的是,如果任何报价单中包含奇数个
    ”,则会放大:

    因为.cs文件可能包含如下注释

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

    您所问的问题将很难用Regex来完成。

    因为.cs文件可能包含如下注释

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

    你的要求将很难用正则表达式完成。

    谢谢,我更改了片段,因为我忘记了一些重要的事情,但它为我解决了我需要的问题。一旦我有了投票权,我会+1。谢谢,我改变了作品,因为我忘记了一些重要的事情,但它让我找到了我需要的东西。我一有投票权就会+1。