簡體   English   中英

C# RegEx - 替換匹配組?

[英]C# RegEx - Replace Match Groups?

找不到干凈的方法來做到這一點-只想替換兩個匹配的字符串-但是每個示例都非常hacky(使用子字符串根據匹配來拆分字符串??),是否有一種干凈的方法來替換字符串中的兩個匹配組?? 謝謝

var inLine = "Project(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Common\", \"Libraries\\Common\\Common.csproj\", \"{91197577-34B9-4D46-B3FE-A8589D4380B1}\"";
var regex = new Regex("Project\\(\\\"{.*}\\\"\\) = \"(?<projectName>\\S*)\", \"(?<relativePath>\\S*)\", \"{.*}\"");
var newProjectName = "Blah";
var newRelativePath = "..\Core\Libraries\Blah\Blah.csproj";
var match = regex.Match(inLine);
if (match.Success)
{
    var projectName = match.Groups[1].Value;
    var relativePath = match.Groups[2].Value;
    var replaced = regex.Replace(inLine, m =>
       {
          // ??????????
          return ""; 
       });
    // want replaced to be:
    // Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blah", "..\Core\Libraries\Blah\Blah.csproj", "{91197577-34B9-4D46-B3FE-A8589D4380B1}"
}

編輯后的帖子:預期的行為是輸入字符串:

項目(“{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}”)=“通用”,“庫\通用\Common.csproj”,“{91197577-34B9-4D46-B3FE-A8589D4380B1}”

想要將 Common 和 Libraries\Common\Common.csproj 替換為 Blah 和 ..\Core\Libraries\Blah\Blah.csproj 等 2 個其他字符串,因此新字符串值(已替換)將是:

項目(“{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}”)=“Blah”,“..\Core\Libraries\Blah\Blah.csproj”,“{91197577-34B9-4D46-B3FE-A8589D4380B1}”

我用谷歌搜索了一下,在這里發現了一些有趣的東西

我稍微調整了他們的解決方案,使其符合標准。 它似乎工作得很好。 雖然我不確定它是否比刪除插入方法更好。

這是我的代碼:

var name = "Blah";
var location = "..\\Core\\Libraries\\Blah\\Blah.csproj";
var result = Regex.Replace(INPUT, "^(.*\")(\\w+)(\".*\")([\\w\\\\\\.]+)(\".*)$", m =>
    {
        return string.Join("",
                m.Groups.OfType<Group>().Select((g, i) =>
                {
                    switch (i)
                    {
                        case 1:
                            return g.Value;
                        case 2:
                            return name;
                        case 3:
                            return g.Value;
                        case 4:
                            return location;
                        default:
                            return g.Value;
                    }
                }).Skip(1).ToArray());
    });

這是ideone上的完整工作代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM