如何解决从字符串“ {0}所需长度为20”派生的String.Format
我正在从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");
从这些字符串中
解决方法
在C#中使用正则表达式; 您可以使用Regex.Matches和以下正则表达式提取参数。
(\(.*?\))
然后您可以使用Regex.Replace和此正则表达式来确定要替换的内容
\{[0-9]+\}
以及第一个正则表达式的结果匹配项(按匹配项保留)以替换这些占位符
您可以在此regex checker
中检查正则表达式
如果您不了解正则表达式,可以在这里regular expressions中查看。
注意:这不适用于文本中包含“(”或“)”的字符串,以代替{no。}。
,这应该对您有帮助。首先,您需要使用此方法从字符串中提取集合:
public static MatchCollection GetMatchedCollections(string stringToSearch,string pattern)
{
var regex = new Regex(pattern,RegexOptions.IgnoreCase);
return regex.Matches(stringToSearch);
}
然后您需要两个正则表达式:
- ({[0-9] +})+
- (([[a-zA-Z]。*?))
因此对于字符串{0} {1} (Length required 20)(Mandatory)
,以上每个都会
分别提取如下:
- {0} {1}
- (所需长度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;
这将导致:
- curlyBraceGroupStr -----> {0} {1}
- bracketGroup1 ----->(所需长度为20)
- bracketGroup2 ----->(必填)
P.S:您还需要编写一种方法,该方法可以根据args的数量来调用String.Format("{0} {1}","Length required 20","Mandatory");
。请注意,String.Format
接受类型为params obj[]
的参数。创建可以正确调用string.Format
的方法应该很容易。但是,如果您有任何问题,请为此发一个单独的问题,因为它确实需要自己的标题。与this question类似。
编辑:以下是操作员的评论
我最终根据您的解决方案使用了以下代码:
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);
}
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。