我有一个这样的字符串:
Dim temp As String = "Batch 634239100A/45 pcs booked out by vladut moraru on 10/15/2015"
或者
Dim temp As String = "Batch 322.3/4 pcs booked out by vladut moraru on 10/15/2015"
或者
Dim temp As String = "Batch 322/3/4 pcs booked out by vladut moraru on 10/15/2015"
我想显示322/3/
Batch is : 322/3/
PCS is : 4
我想只显示所有字符串的<{1}}
我以为我会找到322/3/
,然后在最后322/3/4
之后将其拆分并在/
之前找到值,但是如何?
答案 0 :(得分:1)
最简单的方法是使用RegularExpression,但这样做有一些限制,特别是当您还在字符串中包含日期时。
如果这些数字总是采用NNN/NNN/NN
和的格式,那么它们会在之前任何日期出现,那么这将有效......
Dim regExMatch As System.Text.RegularExpressions.Match
regExMatch = System.Text.RegularExpressions.Regex.Match(myString, "(\d{3}/\d{3})/(\d{2})")
If regExMatch.Success Then
Dim batch As String = regExMatch.Groups(1).Value
Dim pcs As String = regExMatch.Groups(2).Value
End If
正则表达式(\d{3}/\d{3})/(\d{2})
分解为......
(
创建一个捕获组\d{3}
查找3位数字(0-9)/
寻找那个角色\d{3}
查找3位数字(0-9))
关闭并存储捕获组/
寻找那个角色(
创建一个捕获组\d{2}
查找2位数字(0-9))
关闭并存储捕获组(注意,在ASP.NET中,不需要转义/
字符...在大多数其他正则表达式解析器中它是必要的。)
如果您不需要检索pcs
,请删除第二个捕获组(因此看起来像(\d{3}/\d{3})/\d{2}
)...但是您还需要删除regExMatch.Groups(2).Value
否则您将获得例外。
如果您需要检查可变数字的数字,请使用\d{3,5}
的格式,这意味着最少3个,最多5个数字。
更新 - 基于OP提供的新信息。
使用此表达式:"batch (.+)/(\d+) pcs"
regExMatch = System.Text.RegularExpressions.Regex.Match(myString, "batch (.+)/(\d+) pcs",
System.Text.RegularExpressions.RegexOptions.IgnoreCase)