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

本文关键字:正则表达式 字符 | 更新日期: 2023-09-27 18:35:43

我在C#中使用VS 2012和RegExp。
我有一个这样的正则表达式:

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

有什么建议吗?

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

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

只需将正则表达式中的['w]+替换为[-'w]+即可包含破折号。

作为旁注,破折号在字符类中具有特殊含义。它要么需要是类中的第一个,要么是最后一个,或者用反斜杠转义。