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

本文关键字:之间 字符 字符串 两个 | 更新日期: 2023-09-27 18:21:47

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

我正试图获取这样的输入字符串:

string exp = @"$a$ + $ab$";

匹配模式$....$并替换原始字符串中的值。例如,我想用数字1代替$a$,用数字2代替$ab$,所以我的最后一个字符串看起来像"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,这让我相信我的正则表达式是不正确的。

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

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

您的正则表达式模式字符串如下:

@"'$[^$]+'$"

.NET正则表达式中没有正则表达式分隔符("/"),也没有修饰符("/s")。使用RegexOptions

$的意思是"字符串结束",除非您转义它或它在字符类中。

您需要一个字符类来匹配"除$之外的任何东西"([^$])。

如果整个匹配是您感兴趣的,则不需要组。

尝试使用以下代码:

public string SubstituteStandardValues(string exp)
{
    var matches = Regex.Matches(exp, @"'$[a-z]+'$", RegexOptions.IgnoreCase);
    foreach (Match match in matches)
    {
        // replace logic here...
    }
    return exp;
}

您在括号前面放了一个反斜杠,这意味着它在寻找文字"("answers")"。然而,你必须避开美元符号。你也没有使用懒惰的量词。

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