我试图在c#中使用Regex,但以下代码抛出异常:
string pattern = "(\d+)([+*/-])(\d+)";
Regex reg = new Regex (pattern);
经过一番挖掘后,我发现在c#中如果你试图将' - '与[]表达式匹配,它必须作为该括号中的第一个字符,这让我很困惑。
有人可以跳出来向我解释一下吗?
感谢您的任何回复。
答案 0 :(得分:5)
-
字符在字符类[...]
中具有特殊含义以表示范围,因此速记表达式如下所示:
"[a-z]" // matches all lowercase alphabetic characters without having to specify them all.
-
只是字面上解释,如果它是第一个字符只是因为它不能表示范围,因为它之前没有其他值。
老实说,无论是第一个还是最后一个角色都没有区别。
答案 1 :(得分:5)
该代码不会抛出运行时异常 - 代码无法编译,错误“无法识别的转义序列” - 您没有正确地转义反斜杠。 \d
不是有效的转义字符。
这应该有效:
string pattern = "(\\d+)([+*/-])(\\d+)";
或者,使用verbatim string literals:
string pattern = @"(\d+)([+*/-])(\d+)";