正则表达式替换回来

时间:2014-05-06 11:29:56

标签: c# regex

我需要以下情况的帮助:

private string _endPointPattern = @"X(?<name>[a-zA-Z0-9-:]*)X";

现在,如果我想成为一个团体,我就得到它:

match.Groups["name"]

现在让我们假设还原情况:

我想在命名参数中插入字符串“Jerry”以获取XJerryX。 我怎么能用Regex做到这一点?

3 个答案:

答案 0 :(得分:1)

假设X是一个正则表达式模式的占位符(否则只使用String.Replace),这应该有效:

var yourInputString = "XX";
var replacement = "Jerry";
Regex.Replace(yourInputString,
              @"(X)(X)",
              String.Format(@"$1{0}$2", replacement));

编辑:发表评论后(您可能想要更新问题):

您需要更新正则表达式,如下所示:

private string _endPointPattern =
   @"(?<prefix>X)(?<name>[a-zA-Z0-9-:]*)(?<suffix>X)";

然后使用:

var yourInputString = "XX";
var replacement = "Jerry";
var result = Regex.Replace(yourInputString,
                           _endPointPattern,
                           String.Format(@"${{prefix}}{0}${{suffix}}", replacement));

答案 1 :(得分:0)

问题不是很明确,但下面的代码适用于多种情况:XX => XJerryXXBobbyX => XJerryX。但是XXavierX => XJerryXJerryX

string output = Regex.Replace(text, "(?<=X).*?(?=X)", "Jerry");

答案 2 :(得分:0)

decPL您的答案最接近我需要的解决方案。不过我做得更简单:

private const string EndPointFormat = @"X{0}X";

private const string Regex = @"(?<name>[a-zA-Z0-9-:]*)";

private string _endPointPattern = string.Format(EndPointFormat, Regex);

string endPoint = string.Format(EndPointFormat, "Jerry");

现在我可以使用_endPointPattern从Regex中获取名称并以字符串格式将其插回。