我有一个这样的字符串:
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
我只想显示:322/3/
的所有字符串
我以为我会找到322/3/4
,然后在最后一个/
之后给它分裂,并从/
之前找到值,但是如何?
最简单的方法是使用regulareexpression,但是这样做是有限制的,特别是当您还在字符串中包含日期时。
如果数字总是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个数字。
UPDATE -基于op提供的新信息。
使用这个表达式:"batch (.+)/(d+) pcs"
regExMatch = System.Text.RegularExpressions.Regex.Match(myString, "batch (.+)/(d+) pcs",
System.Text.RegularExpressions.RegexOptions.IgnoreCase)