我需要更换所有" 0000-000"带有新GUID的字符串。所以每个" 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;
}
我之前使用过RegEx但不确定如何让每个000-000获得不同的新GUID。谢谢!
答案 0 :(得分:4)
您可以将Regex.Replace
方法与带有匹配评估程序的重载一起使用,以便您可以为每个匹配创建一个新的替换字符串。
在替换特定字符串时,请使用Regex.Escape
方法将其中任何具有特殊含义的字符转义为模式。
xmlContent = Regex.Replace(
xmlContent,
Regex.Escape(fakeGuid),
m => Guid.NewGuid().ToString().ToUpper()
);
如果你没有使用Replace
将GUID放在字符串中,你的第二种方法也会有用,但是使用Substring
来获取要替换的部分之前和之后的部分: / p>
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);
答案 1 :(得分:0)
使用此:
^0{8}-0{4}-0{4}-0{4}-0{12}$
或(仅用于“0”和“ - ”):
^[0-]+$
使用旗帜MultiLine