2014-12-29 2 views
0

Я использую VS 2012 и RegExp в C#.
У меня есть регулярное выражение, как это:Регулярное выражение с использованием символа «-» в C#

^CREATE OR REPLACE PACKAGE ([\w]+).([\w]+) IS 

Я прочитал contents из файла.

У меня есть проблемы с характером -

Test_A_B в норме.
Test-A_B является KO.

Я пробовал использовать Regex.Escape, но это все еще неправильно.

Unit код теста:

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

Любые предложения?

ответ

3

\w содержит буквенно-цифровые символы, а также символ подчеркивания. Он не включает тире.

Просто введите [\w]+ в ваше регулярное выражение с [-\w]+, чтобы включить тире.

В качестве примечания стороны черточка имеет особое значение в классах символов. Это либо должно быть первым в классе, либо последним, либо сбежать с обратной косой чертой.

Смежные вопросы