我有以下字符串。
*keyName:品牌SLES重新定位:(不可重新定位)*keyOpenEnd
我想用{"重新封装*key,用"重新封装*keyOpenEnd:所以我有一个的结果字符串
{"名称:品牌SLES重新定位:(不可重新定位)":
所以我有
output = Regex.Replace(output, @"b"+"key"+@"b", "{"");
output = Regex.Replace(output, @"b*keyOpenEndb", "":");
我尝试过各种不同的组合,但都不起作用。
更新:这个问题似乎有点混乱。澄清;我需要替换确切的短语,否则它将替换KeyOpenEnd中的"Key"以及不好的Key。我需要精确的短语替换。
为什么不直接使用string.Replace
并确保首先替换更具体的值
output = output.Replace("*keyOpenEnd", "":").Replace("*key", "{"");
编辑
下面是比较正则表达式时间与string.Replace
和我的结果的测试代码
string s = "*keyName:branding-SLES Relocations:(not relocatable)*keyOpenEnd";
string desired = "{"Name:branding-SLES Relocations:(not relocatable)":";
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 100000; i++)
{
var n = Regex.Replace(s, @"*keyOpenEnd", "":");
n = Regex.Replace(n, @"*key", "{"");
Assert.AreEqual(desired, n);
}
watch.Stop();
Console.WriteLine("RegEx Total: {0}", watch.Elapsed);
watch.Reset();
watch.Start();
for (int i = 0; i < 100000; i++)
{
var n = s.Replace("*keyOpenEnd", "":").Replace("*key", "{"");
Assert.AreEqual(desired, n);
}
watch.Stop();
Console.WriteLine("String Replace Total: {0}", watch.Elapsed);
结果:
RegEx Total: 00:00:00.1742555
String Replace Total: 00:00:00.0385957
附加编辑
如果您使用一个正则表达式并提前编译它以供使用,string.Replace
仍然是更快的
string s = "*keyName:branding-SLES Relocations:(not relocatable)*keyOpenEnd";
string desired = "{"Name:branding-SLES Relocations:(not relocatable)":";
Regex r = new Regex(@"*key(.*)*keyOpenEnd", RegexOptions.Compiled);
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < 100000; i++)
{
var n = r.Replace(s, "{"$1":");
Assert.AreEqual(desired, n);
}
watch.Stop();
Console.WriteLine("RegEx Total: {0}", watch.Elapsed);
watch.Reset();
watch.Start();
for (int i = 0; i < 100000; i++)
{
var n = s.Replace("*keyOpenEnd", "":").Replace("*key", "{"");
Assert.AreEqual(desired, n);
}
watch.Stop();
Console.WriteLine("String Replace Total: {0}", watch.Elapsed);
结果:
RegEx Total: 00:00:00.0960996
String Replace Total: 00:00:00.0393491
尝试将^*key
替换为{,将*keyOpenEnd$
替换为}
已编辑,如果*是通配符,则执行以下
用{"$1"
替换key(.*)keyOpenEnd