字符串.从字符串"{0} (Length required 20)"派生的格式



我从一个web api接收到一个字符串,该字符串已经是类似string.Format的格式。收到的字符串可以是:

"{0} (Length required 20)"
"{0} {1} (Length required 20)(Mandatory)"

是否可以创建一个与相等的

String.Format("{0}","Length required 20");
String.Format("{0} {1}","Length required 20","Mandatory");

从这些字符串

这应该会对您有所帮助。首先,您需要这个方法从字符串中提取集合:

public static MatchCollection GetMatchedCollections(string stringToSearch, string pattern)
{
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
return regex.Matches(stringToSearch);
}

然后您需要两个正则表达式:

  1. ({[0-9]+}(+
  2. ([a-zA-Z].*?(

因此,对于字符串{0} {1} (Length required 20)(Mandatory),以上每一项都将分别如下提取到集合中:

  1. {0}{1}
  2. (要求长度20((强制要求(

所以要使用上述方法,你所要做的就是:

var masterString = "{0} {1} (Length required 20)(Mandatory)";
var curlyBracesGroups = GetMatchedCollections(masterString, @"({[0-9]+})+");
var bracketsGroups = GetMatchedCollections(masterString, @"(([a-zA-Z].*?))");

var curlyBraceGroupStr = "";
foreach(var curlyBraceGroup in curlyBracesGroups)
{
curlyBraceGroupStr += curlyBraceGroup + " ";
}
var bracketGroup1 = bracketsGroups[0].Value;
var bracketGroup2 = bracketsGroups[1].Value;

这将导致:

  1. curlyBraceGroupStr----->{0}{1}
  2. 括号组1------>(要求长度20(
  3. 括号组2------>(必须(

p.S:您还需要编写一个方法,该方法可以根据参数的数量调用String.Format("{0} {1}","Length required 20","Mandatory");。请注意,String.Format接受类型为params obj[]的参数。创建可以正确调用string.Format的方法应该很容易。然而,如果你有任何问题,请为它单独发布一个问题,因为它确实需要自己的标题。类似于这个问题的东西。

编辑:以下是操作的注释

我最终使用了基于您的解决方案的代码:

public string GetToolTipString(string validatorTooltip)
{
MatchCollection curlyBracesGroups = GetMatchedCollections(validatorTooltip, @"({[0-9]+})+");
MatchCollection bracketsGroups = GetMatchedCollections(validatorTooltip, @"(([a-zA-Z].*?))");
string curlyBraceGroupStr = "";
foreach (var curlyBraceGroup in curlyBracesGroups)
{
curlyBraceGroupStr += curlyBraceGroup + " ";
}

return String.Format(curlyBraceGroupStr,bracketsGroups.Cast<Match>().Select(m=>m.Value).ToArray());
}
private MatchCollection GetMatchedCollections(string stringToSearch, string pattern)
{
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
return regex.Matches(stringToSearch);
}

谢谢

在C#中使用Regex;您可以使用Regex.Matches和以下正则表达式提取参数。

((.*?))

然后,您可以使用Regex.Replace和此Regex来确定要替换的内容

{[0-9]+}

以及第一个正则表达式的结果匹配(按匹配顺序保持(,以替换这些占位符

您可以在这个正则表达式检查器中检查正则表达式
如果您不知道正则表达式,您可以在这里查看正则表达式。

注意:这将不适用于要替换{no}的文本中包含"("或"("的字符串。

相关内容

  • 没有找到相关文章