Regex VB中用于多行匹配的正则表达式模式

Regex VB中用于多行匹配的正则表达式模式,regex,vb.net,Regex,Vb.net,我已经在一行中获得了信息。我有一个信息列表,如: 1838028476391 4 23 36 p 1/820-01* 2183802847649042336P1/820-17* 3 1 838028474271 4 23 36 p 1/820-21* 4183802847629242336P1/820-21* 5183802847426342336p1/820-23* 61838028473802 4336页1/820-21* 我需要每行的12位数字。我尝试了以下代码: Dim re As S

我已经在一行中获得了信息。我有一个信息列表,如:

1838028476391 4 23 36 p 1/820-01*

2183802847649042336P1/820-17*

3 1 838028474271 4 23 36 p 1/820-21*

4183802847629242336P1/820-21*

5183802847426342336p1/820-23*

61838028473802 4336页1/820-21*

我需要每行的12位数字。我尝试了以下代码:

 Dim re As String
  Dim re18 As String
  re18 = "(\d{12})"
  Dim r3 As New RegExp
  r3.Pattern = re18
  r3.IgnoreCase = True
  r3.MultiLine = True


 If r3.Test(Body) Then
    Dim m3 As MatchCollection
    Set m3 = r3.Execute(Body)
    If m3.Item(0).SubMatches.Count > 0 Then
        Dim number
        For j = 1 To m3.Count
            Set number = m3.Item(j - 1)
            MsgBox ("Number: " + number)
        Next
    End If
  End If
我只得到第一个匹配-即使我调试makro并在手表中查看m3-也只有一个匹配。我还尝试在\d{12}之后使用量词*或+

我如何让这个正则表达式工作

关于正则表达式,我还有一个问题:如果我想在一个特殊的单词后面匹配一些东西,我会把这个单词放在模式的开头,后面是数字或者我想要的任何东西。如果我执行这个正则表达式-我会得到信息或匹配,包括我在模式开头输入的单词吗?!
比如:“BUS\d{12}”,我只想要数字作为结果,但知道BUS位于数字之前…

您需要使用
全局
选项,而不是
多行
<代码>多行更改锚(
^
$
)的行为,以便它们匹配每行的开头和结尾,而不仅仅是整个文本的开头和结尾
Global
是告诉它查找所有匹配项的选项,而不仅仅是第一个匹配项

您可能也不需要使用SubMatches属性。您的正则表达式只有一个捕获组,它捕获整个匹配。这意味着
m3.子匹配将只包含一个项,
项(0)
,它将与
m3.项(0)
完全相同。(请注意,第一个组的索引是
0
,而不是
1
,这与使用其他正则表达式工具时的预期不同。)

第二个问题是SubMatches属性的作用。如果要查找单词“BUS”后面的每个12位数字,可以使用如下正则表达式:

BUS\s*(\d{12})
Set m3 = r3.Execute(Body)
For Each myMatch in m3
  MsgBox("Number: " + m3.SubMatches(0).Value)
Next
…您将从每个匹配中检索数字,如下所示:

BUS\s*(\d{12})
Set m3 = r3.Execute(Body)
For Each myMatch in m3
  MsgBox("Number: " + m3.SubMatches(0).Value)
Next
更多信息