这是一个非常基本的正则表达式问题,但我不太确定我哪里出错了。
我正在尝试输入如下的输入字符串:
string exp = @"$a$ + $ab$";
匹配模式$....$
并替换原始字符串中的该值。例如,我想用$a$
的数字1和$ab$
的数字2替换,所以我的最终字符串看起来像"1 + 2"
。
我所设置的是以下功能:
private string SubstituteStandardValues(string exp)
{
//Find Std values w/Regex
Match match = Regex.Match(exp, @"/\($.*$\)/s", RegexOptions.IgnoreCase);
if (match.Success)
{
foreach (var m in match.Groups)
{
//Do string replace logic here!
}
}
return exp;
}
我的问题是match
总是false
,这让我相信我的正则表达式是错误的。
我哪里误入歧途?谢谢你的帮助!
答案 0 :(得分:4)
你的正则表达式模式字符串是这样的:
@"\$[^$]+\$"
.NET正则表达式中没有正则表达式分隔符(“/”),也没有修饰符(“/ s”)。请使用RegexOptions
。
$
表示“字符串结束”,除非您将其转义或它在字符类中。
您需要一个字符类来匹配“除了$”之外的所有内容([^$]
)。
如果您感兴趣的整场比赛,则不需要分组。
答案 1 :(得分:1)
尝试使用此代码:
public string SubstituteStandardValues(string exp)
{
var matches = Regex.Matches(exp, @"\$[a-z]+\$", RegexOptions.IgnoreCase);
foreach (Match match in matches)
{
// replace logic here...
}
return exp;
}
答案 2 :(得分:-1)
你在括号前面加了一个反斜杠,这意味着它正在寻找文字“(”和“)”。但是,你必须逃脱美元符号。你也没有使用懒惰的量词。
@"/(\$.*?\$)/"