Regex VB中用于多行匹配的正则表达式模式
我已经在一行中获得了信息。我有一个信息列表,如: 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位数字。我尝试了以下代码: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
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
更多信息