VB.Net 正则表达式许可证密钥



所以我想从一些文本(mytext)中解析许可证密钥。

所有许可证密钥的形式为:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX(X 作为随机字符)

我试过了:

Dim findtext1 As String = "(?<=w{5}-w{5}-w{5}-w{5}-w{5})"
Dim myregex1 As String = mytext
Dim doregex1 As MatchCollection = Regex.Matches(myregex1, findtext1)
Dim matches1 As String = ""
For Each match1 As Match In doregex1
matches1 = matches1 + match1.ToString + Environment.NewLine
Next
MsgBox(matches1)

但是没有发现任何结果。

我相信你需要从更大的文本中提取这些数字。因此,您需要使模式成为消费模式(即,删除使模式成为正后视示例的(?<=和最终),该示例仅检查文本是否与模式匹配,但不将匹配的文本放入返回的匹配值中)并使用单词边界以避免较长子字符串中的部分匹配(例如,避免将abcnabc45字符串中的awc模式匹配)。

这是整个固定代码:

Dim findtext1 As String = "bw{5}(?:-w{5}){4}b"
Dim myregex1 As String = "ABCDE-XXXXX-XXXXX-XXXXX-12345;FGHIJ-XXXXX-XXXXX-XXXXX-12345; ABCDE-XXXXX-XXXXX-XXXXX-123456"
Dim doregex1 As MatchCollection = System.Text.RegularExpressions.Regex.Matches(myregex1, findtext1)
Dim matches1 As String = ""
For Each match1 As Match In doregex1
matches1 = matches1 + match1.ToString + Environment.NewLine
Next
Console.Write(matches1)

在线观看 VB.NET 演示。它打印

ABCDE-XXXXX-XXXXX-XXXXX-12345
FGHIJ-XXXXX-XXXXX-XXXXX-12345

但不是ABCDE-XXXXX-XXXXX-XXXXX-123456(因为最后一个块包含 6 位数字)。

图案详情

  • b- 单词边界
  • w{5}- 5 字字符
  • (?:-w{5}){4}- 正好出现 4 次-后跟 5 个单词字符
  • b- 单词边界

请参阅正则表达式演示。

请注意,在 .NET 中,w匹配[p{L}p{N}_],即所有 Unicode 字母和数字,因此,如果您只需要匹配 ASCII 字符,请传递RegexOptions.ECMAScript选项:

Regex.Matches(myregex1, findtext1, RegexOptions.ECMAScript)

还有一个注意事项:如果你不需要匹配一个_,你需要调整模式以排除_并将其添加到单词边界:

(?<=b|_)[^W_]{5}(?:-[^W_]{5}){4}(?=b|_)

请参阅正则表达式演示。

但是没有找到任何结果。

您的正则表达式(?<=w{5}-w{5}-w{5}-w{5}-w{5})的问题是您试图通过使用称为Positive Lookbehind(?<=..)来匹配zero-witdh

您应该尝试使用^(w{5}-w{5}-w{5}-w{5}-w{5})$.

为了简短起见,有多种方法。就像他们中的一些人在评论中指出的那样。

最新更新