如何在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
,这让我相信我的正则表达式是不正确的。
我在哪里误入歧途了?谢谢你的帮助!
您的正则表达式模式字符串如下:
@"'$[^$]+'$"
.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")"。然而,你必须避开美元符号。你也没有使用懒惰的量词。
@"/('$.*?'$)/"