无法在正则表达式构造函数实例化中使用逐字字符串

本文关键字:字符串 实例化 正则表达式 构造函数 | 更新日期: 2023-09-27 18:32:32

我正在尝试使用模式更新一个正则表达式对象。 字符串模式和原始正则表达式如下所示:

string search = "Root''Hill";
var regex = new Regex(search, RegexOptions.IgnoreCase);

这引发了一个System.ArgumentException异常,所以我想将模式转换为逐字字符串。 我试过这个:

var regex = new Regex(@search, RegexOptions.IgnoreCase);

而这个:

string verbatim = @search;
var regex = new Regex(verbatim , RegexOptions.IgnoreCase);

但无济于事。 它们都抛出相同的异常。 当我调试时,将"原始"字符串放在正则表达式构造函数中(例如。 new Regex(@"Root''Hill", RegexOptions.IgnoreCase) )有效,但我的搜索值当然会发生变化。

如何将逐字字符串与变量一起使用?

无法在正则表达式构造函数实例化中使用逐字字符串

@符号必须位于字符串文本之前,而不是变量名称之前:

string search = @"Root''Hill";
var regex = new Regex(search, RegexOptions.IgnoreCase);

@符号放在标识符之前只是使用语言关键字作为标识符的一种方式,它与逐字字符串无关。

您使用的语法是"将此标识符视为标识符,即使它是关键字"的语法。也就是说,你可以说:

int @for = @class + @struct;

编译器不会抱怨。这是一个逐字标识符。 看

http://ericlippert.com/2013/09/09/verbatim-identifiers/

了解更多详情。

逐字字符串文本将@放在字符串文本之前:

string search1 = "Root''Hill";  //  backslash is escaped: Root'Hill
string search2 = @"Root''Hill";   //  backslash is literal: Root''Hill