没有输入字符串的C#正则表达式格式字符串

时间:2018-10-13 20:38:49

标签: c# regex

我有以下正则表达式用于匹配传入数据包:

public static class ProtobufConstants
{
    public static Regex ContentTypeNameRegex => new Regex("application/protobuf; proto=(.*?)");
}

我还需要以相同的格式编写输出数据包字符串,即理想情况下,使用相同的正则表达式定义"application/protobuf; proto=mynamespace.class1"创建类似于new Regex("application/protobuf; proto=(.*?)");的字符串。

要将此代码保存在一个地方,是否可以使用此正则表达式模板并将(.*?)参数替换为字符串(按照上述示例,我想用"mynamespace.class1"代替)。

我看到有一个Regex.Replace(string input, string replacement),但是鉴于上面的ContentTypeNameRegex已经定义了格式,我本身没有输入,我只想格式化-不知道在这里输入什么,如果有的话。

是否可以这种方式使用,还是我需要恢复为string.Format?

2 个答案:

答案 0 :(得分:2)

如果您只想将匹配的组替换为其他组,则可以将模式更改为:

(application/protobuf; proto=)(.*?)

这样,您可以通过执行以下操作来替换它:

Regex re = ContentTypeNameRegex;
string replacement = "mynamespace.class1";
re.Replace(input, "$1" + replacement);

答案 1 :(得分:0)

使用Regex.Replace,但使用匹配评估程序来处理您的格式需求。这是一个示例,它根据匹配的内容将斜杠简单地替换为破折号,反之亦然。

var text = "001-34/323";

Regex.Replace(text, "[-/]", me => { return me.Value == "-" ? "/" : "-";   })

结果

001/34-323

您可以对输入内容进行相同的操作,以决定对其进行更改或按原样发送。