在 C# 中使用字符“-”的正则表达式
本文关键字:正则表达式 字符 | 更新日期: 2023-09-27 18:35:43
我在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);
有什么建议吗?
'w
包括字母数字字符和下划线。它不包括破折号。
只需将正则表达式中的['w]+
替换为[-'w]+
即可包含破折号。
作为旁注,破折号在字符类中具有特殊含义。它要么需要是类中的第一个,要么是最后一个,或者用反斜杠转义。