正则表达式匹配 .net 小于 "<" (name)W7

regex match .net lessthan "<" (name)W7

我正在尝试匹配我认为在 vb.net 中非常简单的正则表达式,尽管我并没有真正使用它们,并且文本文件中应该有多次出现 i' m 读入一个字符串。我使用的匹配项是

Dim match As Match = Regex.Match(input, "<[A-B]+W7", RegexOptions.IgnoreCase)

也试过

Dim match As Match = Regex.Match(input, "<[\w]+W7", RegexOptions.IgnoreCase)

我需要的是与始终以 < 开头的名称相匹配的名称,后跟以 W7 结尾的名称。例如 <TESTW7。然后我需要从比赛中抓取所有出现的地方。

我错过了什么?谢谢!

编辑

Dim match As Match = Regex.Match(input, "\<(\w+)W7", RegexOptions.IgnoreCase)

上面一行匹配单个案例,但我正在尝试匹配多个案例。例如 <BEARW7> <<<ROOMW7> <<VIVALDIW7> << AMESW7>

我需要将 BEARW7、ROOMW7、VIVALDIW7 和 AMESW7 保存到数组或列表中,但似乎无法匹配过去 "BEARW7",有没有办法让它匹配多种情况,例如 boost 的正则表达式?

  • 在第一个正则表达式 <[A-B]+W7 中,问题是您只匹配 (name) 部分包含 A-B 范围内至少一个或多个字符(因为 +)的字符串,即A或B。

正如我所想的那样,由于第二个正则表达式,您希望 (name) 包含任何字符(字母和数字),因此,当您使用 IgnoreCase 选项时,您应该使用而不是 [0-9A-Z] 范围,您将至少匹配一个或多个 letter/digit 从 A-Z 和从 0-9 的小写或大写。

所以你应该使用<[0-9A-Z]+W7.

  • 在第二个正则表达式 <[\w]+W7 中,我认为没有任何问题,因为您匹配的是您声明的字符串类型。

我没有在 Visual Basic.NET 中使用过正则表达式,正如@AlanMoore 所说,它不会与正则表达式的特殊语法产生任何冲突,所以我不知道可能是什么错误的。您可以尝试对其进行转义以确保确定,但这不是必需的。

而且可能与W7的部分有一些奇怪的冲突(但我不这么认为)所以你可以把它们放在括号之间以避免可能的冲突。

所以你应该使用<[0-9A-Z]+(W7)<[\w]+(W7)

如果是这种情况(根据你的例子我不完全知道)你不想匹配数字,你不能使用第二个正则表达式,你必须 trim 来自第一个正则表达式。

所以你应该使用<[A-Z]+(W7)

Note that without the IgnoreCase option, the second regular expression will continue working as it matches any letter (upper or lowercase), but the first one only matches uppercase letters.

我建议您 http://www.regexr.com/ 以便在程序中使用正则表达式之前先试用它们。它也有一个很好的备忘单。