我在C#中使用VS 2012和RegExp 我有一个像这样的正则表达式:
^CREATE OR REPLACE PACKAGE ([\w]+).([\w]+) IS
我从文件中读取contents
。
我遇到了字符-
Test_A_B
没问题
Test-A_B
KO 。
我尝试使用Regex.Escape
,但它仍然是错误的。
单元测试代码:
var pattern1 = @"^CREATE OR REPLACE PACKAGE ([\w]+).([\w]+) IS";
var regexPackage = new Regex(pattern1);
var contents = @"CREATE OR REPLACE PACKAGE ZZZ.Test_A_B IS";
match1 = regexPackage.Match(contents);
Assert.IsTrue(match1.Success);
Assert.AreNotEqual(0, match1.Groups.Count);
Assert.AreEqual("Test_A_B", match1.Groups[2].Value);
contents = @"CREATE OR REPLACE PACKAGE ZZZ.Test-A_B IS";
//contents = Regex.Escape(contents);
match1 = regexPackage.Match(contents);
Assert.IsTrue(match1.Success); <===== FAILS
Assert.AreNotEqual(0, match1.Groups.Count);
Assert.AreEqual("Test-A_B", match1.Groups[2].Value);
有什么建议吗?
答案 0 :(得分:3)
\w
包含字母数字字符和下划线。它不包括破折号。
只需使用[\w]+
替换正则表达式中的[-\w]+
即可包含短划线。
作为旁注,短划线在字符类中具有特殊含义。它要么是在班级中的第一个,要么是最后一个,或者用反斜杠进行转义。