正则表达式括号和双引号

时间:2016-08-04 19:40:58

标签: c# regex

我有一个编写C#应用程序来解析xml文件的任务。文件中的一个属性值是Replace语句,我必须解析它以创建PowerShell Replace语句。我正在使用正则表达式来执行此操作。字符串如下所示:

替换(FileName," .txt"," .doc")

我想捕获" FileName"," .txt"和" .doc"

我的问题是,如何匹配开放(左)的parens和双引号?

我的问题是,我无法使用

@"\"pattern\""

因为' @'符号不识别转义的双引号(在VS 2015中)。如果我删除了' @',那我该如何逃避开放(左)的parens?我无法使用

"\("

作为转义序列b / c编译器说,"无法识别的转义序列"。

无论如何,所有的帮助都表示赞赏。

3 个答案:

答案 0 :(得分:0)

示例正则表达式看起来像

^Replace\((\w+)\s*,\s*("[^"]*")\s*,\s*("[^"]*")\)$

请参阅regex demo

要在C#中定义它,您可以在需要的地方选择常规字符串文字(支持转义序列,如文字换行符\n)逃避双引号和双重转义特殊正则表达式字符(因为正则表达式引擎需要\d\.中的字面反斜杠来分别匹配数字或点):

var pattern = "^Replace\\((\\w+)\\s*,\\s*(\"[^\"]*\")\\s*,\\s*(\"[^\"]*\")\\)$";

或使用逐字字符串文字(不解析转义序列,@"\d"是一个包含2个字符\d的字符串,匹配一个数字)以避免使用\过度转换,但你需要加倍双引号以在字符串中插入文字双引号:

var pattern = @"^Replace\((\w+)\s*,\s*(""[^""]*"")\s*,\s*(""[^""]*"")\)$

答案 1 :(得分:0)

试试这个

 string t = @" name ""test""";
 Console.WriteLine(t);

输出是==>名称“test”

答案 2 :(得分:0)

格式化为可读的正则表达式:

  var pattern =@"
    Replace
    \(
    (?<filename>\w+)
    \,\s*
    \u0022                # double quote
    \.
    (?<txt>\w+)
    \u0022
    ,\s*
    \u0022
    \.
    (?<doc>\w+)

“;

unicode \ u0022是双引号

以下类解析文本并提取文件名,Txt和Doc:

 class RegParser
{
    public string FileNmae { get; set; }
    public string Doc { get; set; }
    public string Txt { get; set; }      




    private static string pattern = @"
    Replace
    \(
    (?<filename>\w+)
    \,\s*
    \u0022                # double quote
    \.
    (?<txt>\w+)
    \u0022
    ,\s*
    \u0022
    \.
    (?<doc>\w+)     
 ";         

    private Regex regex = new Regex(pattern,
           RegexOptions.Singleline
           | RegexOptions.ExplicitCapture
           | RegexOptions.CultureInvariant
           | RegexOptions.IgnorePatternWhitespace
           | RegexOptions.Compiled
           );

    public void Parse(string text)
    {
        Console.WriteLine("text: {0}",text);
        Match m = regex.Match(text);
        FileNmae = m.Groups["filename"].ToString();
        Doc = m.Groups["doc"].ToString();
        Txt = m.Groups["txt"].ToString();        
    }
}  

Try it

示例输出:

 text: Replace(FileName, ".txt", ".doc")
 FileNmae: FileName
 Doc:  doc
 Txt:    txt