在C#中使用字符“ - ”的正则表达式

时间:2014-12-29 13:27:05

标签: c# regex

我在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);

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

\w包含字母数字字符和下划线。它不包括破折号。

只需使用[\w]+替换正则表达式中的[-\w]+即可包含短划线。

作为旁注,短划线在字符类中具有特殊含义。它要么是在班级中的第一个,要么是最后一个,或者用反斜杠进行转义。