You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#字符串变量的引号在正则表达式中是否始终被忽略?

C#字符串变量的引号是否会被正则表达式当作内容处理?

虽然这是基础问题,但转义引号相关的复杂场景太多,反而把字符串变量的这个基础点给掩盖了。以下内容基于Visual Studio 2019环境下的C#展开:

在C#中,待匹配的字符串变量与正则模式字符串变量,在代码编写和调试器显示时都会被双引号包裹,这是语法和调试工具的表现,无法避免。

原本的预期是:这些引号只是C#字符串的语法标记,不会被正则表达式当作内容处理,示例验证也符合这个预期:

string ourTestString = "Smith";
string ourRegexToMatch = "^(Sm)";
Regex ourRegexVar = new Regex(ourRegexToMatch, RegexOptions.Singleline);
var matchCollection = ourRegexVar.Matches(ourTestString);
bool ourMatch = matchCollection.Count == 1;

这个示例的目标是匹配行首的Sm(区分大小写),运行后ourMatch的值为true。调试器中ourRegexVar的显示也不含包裹变量的引号,仅用大括号标识内容,进一步验证了这一点。

核心结论

编译器生成的这些引号永远不会被正则表达式当作内容处理。

原因很明确:代码里的双引号是C#字符串字面量的分隔符,属于语法层面的标记,并不会被包含在字符串变量实际存储的值中。比如string ourTestString = "Smith";,变量实际存储的字符序列是Smith,引号只是告诉编译器这是字符串的起始和结束边界。

含实际引号的复杂场景说明

如果你的字符串内容本身需要包含双引号(比如待匹配的文本里有引号),你需要在代码中通过转义符\"或者逐字字符串@"..."来表示,这时的引号才是字符串实际内容的一部分,会被正则引擎当作匹配目标处理。例如:

// 待匹配字符串包含实际双引号
string testWithQuotes = "\"Hello World\"";
// 正则模式匹配带引号的完整内容
string regexPattern = "^\"Hello World\"$";
Regex regex = new Regex(regexPattern);
bool isMatch = regex.IsMatch(testWithQuotes); // 返回true

另外要注意:调试器中显示的引号只是用来标识这是字符串类型的值,同样不属于变量实际存储的内容,正则引擎只会处理变量持有的真实字符序列。

内容的提问来源于stack exchange,提问作者JosephDoggie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:15:39