[英]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.