0

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

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))中是可行的,但我的搜索值当然会发生变化。

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

4

2 回答 2

2

@符号必须在字符串文字之前,而不是在变量名之前:

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

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

于 2013-09-24T15:36:17.523 回答
2

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

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
于 2013-09-24T15:39:15.163 回答