无法在正则表达式构造函数实例化中使用逐字字符串
本文关键字:字符串 实例化 正则表达式 构造函数 | 更新日期: 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