2014-12-29 47 views
0

我使用VS 2012和正則表達式在C#。
我有一個正則表達式是這樣的:正則表達式「 - 」在C#中

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

我從文件中讀取contents

我有性格的煩惱-

Test_A_B被確定。
Test-A_BKO

我嘗試使用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); 

有什麼建議?

回答

3

\w包括字母數字字符以及下劃線。它不包括破折號。

只需在您的正則表達式與[-\w]+取代[\w]+包括儀表板。

作爲一個側面說明,破折號具有字符類中具有特殊意義。它要麼必須是班級中的第一名,要麼是最後一名,或者使用反斜槓進行轉義。