如何在C#中的两个标记字符之间找到可变长度字符串?

时间:2012-01-26 21:42:38

标签: c# asp.net .net regex

这是一个非常基本的正则表达式问题,但我不太确定我哪里出错了。

我正在尝试输入如下的输入字符串:

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,这让我相信我的正则表达式是错误的。

我哪里误入歧途?谢谢你的帮助!

3 个答案:

答案 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)

你在括号前面加了一个反斜杠,这意味着它正在寻找文字“(”和“)”。但是,你必须逃脱美元符号。你也没有使用懒惰的量词。

@"/(\$.*?\$)/"