我有一个字符串,其值为
{ctrl1} + {ctrl2}
({ctrl1} / {ctrl2}) * {ctrl3}
if ({ctrl1} > {ctrl2}) then {ctrl1} * 10 else {ctrl} + {ctrl2} endif
可能有几个像这样的公式。这将在字符串变量中提供。我需要提取所有{..}
值。
因此,在example1中,我应该提取{ctrl1}
,{ctrl2}
。在Example2中,我应该提取{ctrl1}
,{ctrl2}
,{ctrl3}
。在示例3中,我应该提取{ctrl1}
,{ctrl2}
。
有人可以帮我准备一个正则表达式吗?
答案 0 :(得分:2)
您可能想要{[^}]+}
。
但请注意,这不会处理{hello{2}}
之类的递归内容。你可能需要一个真正的解析器来做这样的事情。
答案 1 :(得分:1)
{\S+?}
之类的东西可以解决问题。
答案 2 :(得分:0)
您可以将regex和LINQ结合起来并执行此操作:
Regex.Matches(input, "{.*?}").Cast<Match>().Select(m => m.Value).Distinct();
假设{ctrl}
在上一个例子中是一个拼写错误。
答案 3 :(得分:-2)
private void TrimControlNames()
{
if (txtFormula.Text.Trim().Length > 0)
{
string formula = txtFormula.Text.Trim();
string pattern1 = "{[a-zA-Z0-9$_ ]+}"; //to identify control placeholders
StringBuilder names = new StringBuilder();
foreach (Match m in Regex.Matches(formula, pattern1))
{
if (m.Value.Contains(" "))
{
string str = m.Value.Replace(" ", string.Empty); //It is ok to remove like this since control names are not allowed to have spaces.
formula = formula.Replace(m.Value, str);
}
}
txtFormula.Text = formula;
}
}
此方法执行我的预期。