regex C#正则表达式、字符串变量和不可避免的引号

wljmcqd8  于 2022-11-18  发布在  C#
关注(0)|答案(1)|浏览(140)

虽然这是一个基本的例子,但围绕转义引号有太多的问题,以至于这个关于字符串变量的基本问题似乎被“噪音”淹没了。
对于此问题,C#始终位于Visual Studio C#的上下文中,在本例中为Visual Studio-2019。
在C#中,字符串中要测试模式匹配的变量和包含模式的字符串都被引号括起来。这些引号也出现在C#程序代码和调试器字符串变量值中。这似乎是不可避免的。
由于这些引号是C#字符串变量本身的一部分,我希望它们作为标准语法的一部分被regex忽略。
看起来是这样的。但是,我想验证这是否正确工作,以及它是如何工作的。
示例:

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

目的是匹配行首的Sm,并且当前区分大小写。
在上面的代码中,ourMatch确实为true,正如所期望的那样。
在调试器中,ourRegexVar本身并没有用引号括住C#变量。我认为这是正则表达式变量的标准,所有的东西都用大括号括住。
人们可以很容易地想象出复杂的场景,其中涉及到确实有引号和转义引号等的字符串,因此它可能会比上面相当简单的示例复杂得多。

***我的问题是:***对于正则表达式和C#变量,是否总是出现以下情况:对于ourTestString C#字符串变量和ourRegexToMatch C#变量,它与编译器为C#字符串变量引入的“”完全一样,存在?

rggaifut

rggaifut1#

引号告诉编译器它是一个字符串,内存中的字符串不是用引号分隔的。
如果字符串中确实有引号,比如Sm"ith,则必须对其进行转义,如下所示:

var s1 = "Sm\"ith";
var s2 = @"Sm""ith";

相关问题