C# 如何用新的guid替换子字符串000-000

C# 如何用新的guid替换子字符串000-000,c#,regex,xml,C#,Regex,Xml,我需要用新的guid替换所有“0000-000”字符串。因此字符串中的每个“0000-000”都应该有一个新的GUID。到目前为止,我已经能够用一个新的GUID替换所有的GUID。下面是一个非常基本的代码: private string ReplaceGuids(string xmlContent) { string fakeGuid = "00000000-0000-0000-0000-000000000000"; xmlContent = @"<!--<workf

我需要用新的guid替换所有“0000-000”字符串。因此字符串中的每个“0000-000”都应该有一个新的GUID。到目前为止,我已经能够用一个新的GUID替换所有的GUID。下面是一个非常基本的代码:

private string ReplaceGuids(string xmlContent)
{
    string fakeGuid = "00000000-0000-0000-0000-000000000000";
    xmlContent = @"<!--<workflow id=""00000000-0000-0000-0000-000000000000"">--><!--<workflow id=""00000000-0000-0000-0000-000000000000"">-->";

    //Method 1: replaces all 000000-00000 with the same new GUID
    xmlContent = xmlContent.Replace(fakeGuid, Guid.NewGuid().ToString().ToUpper());

    //Method 2: also replacs all 0000-00000 with the same GUID
    int pos = -1;
    do
    {
        pos = xmlContent.IndexOf(fakeGuid);
        if (pos > 0)
        {
            xmlContent = xmlContent.Replace(fakeGuid, Guid.NewGuid().ToString().ToUpper());
        }

    } while (pos > 0);

    return xmlContent;
}
私有字符串替换GUID(字符串xmlContent)
{
字符串fakeGuid=“00000000-0000-0000-0000-000000000000”;
xmlContent=@;
//方法1:用相同的新GUID替换所有000000-00000
xmlContent=xmlContent.Replace(fakeGuid,Guid.NewGuid().ToString().ToUpper());
//方法2:还使用相同的GUID重播所有0000-00000
int pos=-1;
做
{
pos=xmlContent.IndexOf(fakeGuid);
如果(位置>0)
{
xmlContent=xmlContent.Replace(fakeGuid,Guid.NewGuid().ToString().ToUpper());
}
}而(pos>0);
返回XML内容;
}

我以前使用过RegEx,但不知道如何使每个000-000得到不同的新guid。谢谢大家!

您可以使用
Regex.Replace
方法替换带有匹配计算器的重载,以便为每个匹配创建新的替换字符串

在替换特定字符串时,请使用
Regex.Escape
方法对其中具有特殊模式含义的任何字符进行转义

xmlContent = Regex.Replace(
  xmlContent,
  Regex.Escape(fakeGuid),
  m => Guid.NewGuid().ToString().ToUpper()
);
如果您没有使用
Replace
将GUID放入字符串中,而是使用
Substring
获取要替换的部分前后的部分,则第二种方法也会起作用:

int pos = -1;
do {
  pos = xmlContent.IndexOf(fakeGuid);
  if (pos > 0) {
    xmlContent =
      xmlContent.Substring(0, pos) +
      Guid.NewGuid().ToString().ToUpper() +
      xmlContent.Substring(pos + fakeGuid.Length);
  }
} while (pos > 0);

您可以使用带有匹配计算器的重载的
Regex.Replace
方法,以便为每个匹配创建新的替换字符串

在替换特定字符串时,请使用
Regex.Escape
方法对其中具有特殊模式含义的任何字符进行转义

xmlContent = Regex.Replace(
  xmlContent,
  Regex.Escape(fakeGuid),
  m => Guid.NewGuid().ToString().ToUpper()
);
如果您没有使用
Replace
将GUID放入字符串中,而是使用
Substring
获取要替换的部分前后的部分,则第二种方法也会起作用:

int pos = -1;
do {
  pos = xmlContent.IndexOf(fakeGuid);
  if (pos > 0) {
    xmlContent =
      xmlContent.Substring(0, pos) +
      Guid.NewGuid().ToString().ToUpper() +
      xmlContent.Substring(pos + fakeGuid.Length);
  }
} while (pos > 0);
使用以下命令:

^0{8}-0{4}-0{4}-0{4}-0{12}$
或(仅适用于“0”和“-”):

带标志多行

使用以下方法:

^0{8}-0{4}-0{4}-0{4}-0{12}$
或(仅适用于“0”和“-”):

带标志多行