Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于字符串替换的正则表达式_C#_Regex - Fatal编程技术网

C# 用于字符串替换的正则表达式

C# 用于字符串替换的正则表达式,c#,regex,C#,Regex,我有大约100个文件需要替换: 带Eval(“某物”)的Eval(“某物”)。ToEncodeString() Eval(“某物”).ToString()和Eval(“某物”).toEncodeString() 我正在编写一个小型C#应用程序,可以自动完成这项工作。但无法形成正则表达式。有人能帮我吗?你可以使用这个模式:@“\bEval\((?。+)”\)(?:\.ToString\(\)?” 细分: \bEval:匹配单词边界,以确保我们将“Eval”作为一个完整的单词而不是另一个单词的一部

我有大约100个文件需要替换:

  • 带Eval(“某物”)的Eval(“某物”)。ToEncodeString()
  • Eval(“某物”).ToString()和Eval(“某物”).toEncodeString()

  • 我正在编写一个小型C#应用程序,可以自动完成这项工作。但无法形成正则表达式。有人能帮我吗?

    你可以使用这个模式:
    @“\bEval\((?。+)”\)(?:\.ToString\(\)?”

    细分:

    • \bEval
      :匹配单词边界,以确保我们将“Eval”作为一个完整的单词而不是另一个单词的一部分进行匹配
    • \(“”
      :文字的左括号和双引号(双引号出现两次,因为这是使用逐字字符串文字时的转义方式,即字符串前面的@符号)
    • (?。+?)
      :命名的“Value”捕获组,它是任何字符的非贪婪匹配(将在双引号处停止)
    • “”\)
      :结束双引号和结束括号
    • (?:\.ToString\(\)?
      (?:…)
      位是非捕获组,然后我们将
      .ToString()
      逐字匹配适当的转义,最后的
      使该组成为可选组
    替换模式是
    @“Eval(“${Value}”).ToEncodedString()”
    ,这很容易理解。重要的部分是命名的捕获组“Value”通过使用
    ${Value}
    引用

    示例代码:

    string[] inputs = 
    {
        @"Eval(""something"")",
        @"Eval(""hello"").ToString()"
    };
    
    string pattern = @"\bEval\(""(?<Value>.+?)""\)(?:\.ToString\(\))?";
    string replacement = @"Eval(""${Value}"").ToEncodedString()";
    
    foreach (var input in inputs)
    {
        Console.WriteLine(Regex.Replace(input, pattern, replacement));
    }
    
    string[]输入=
    {
    @“Eval”(“某物”),
    @Eval(“hello”).ToString()
    };
    字符串模式=@“\bEval\(?。+?)”\(?:\.ToString\(\)?”;
    字符串替换=@“Eval(“${Value}”).ToEncodeString();
    foreach(输入中的var输入)
    {
    Console.WriteLine(Regex.Replace(输入、模式、替换));
    }
    
    为什么不在记事本++中打开这些文件并替换其中的文本,将其应用于所有打开的文件引号中的字符串可以是任何内容。所以我需要使用正则表达式。如果我使用TextPad,搜索正则表达式和替换正则表达式是什么?你试过什么吗?显示会让人们看到你已经尝试过,并且你不是在寻找“为我编码/免费”答案。顺便说一句,我可以给你一个提示:
    \w
    匹配任何单词字符,
    +
    表示1次或多次。更多信息请参见此处:我尝试使用Regex.Replace(txt,“([Eval(]\”[a-z0-9]+\“[)])?”,”);但不确定如何指定替换字符串以及regexp。@Nevyn使用时(即字符串前面的@符号),可以使用双引号两次来转义双引号。如果没有逐字字符串文字,您将用反斜杠转义双引号,如
    \“hello\”
    ,但使用它们,它是
    “hello”
    。为了澄清我为什么一开始就使用它们,它使得使用转义序列比在反斜杠上加倍更容易,而且正则表达式对于元字符往往有许多反斜杠。好的,这很有意义。我不知道你能做到。看起来很奇怪:-)@ahmad非常感谢。我一直在努力匹配论文的开头和结尾。谢谢