使用vb.net解析字符串中的数字值

时间:2018-11-05 01:07:11

标签: regex vb.net split

我有两个不同的字符串。

               www.ncbi.nlm.nih.gov/myncbi/browse/collection/40918026/?sort=date&direction=descending

              https://www.ncbi.nlm.nih.gov/sites/myncbi/john.smith.1/bibliography/47926757/public/?sort=date&direction=descending

我需要单词收集或参考书目后的数字。我知道我可以分割“ /”斜杠,但是如果它以http开头,则不会相同。再加上一个在第5位,另一个在第6位。使用正则表达式是否有更好的方法?我知道我可以整理一堆代码来搜索每个单词,然后做一些不同的事情,但我正在寻找一种更干净的方法将其拉出

我正在使用

              Dim str() As String = TextBox1.Text.Split("/")

              For i As Integer = 0 To str.Length - 1
              If Regex.IsMatch(str(i), "^[0-9 ]+$") Then
              MessageBox.Show(str(i).ToString)
              End If

              Next

但希望有更清洁的东西

2 个答案:

答案 0 :(得分:2)

尝试使用此正则表达式:(?:collection|bibliography)\/(\d+)

所需的号码将在第一个 capturing group

请参见 demo

答案 1 :(得分:2)

一种类似但简单的替代方法,无需拆分:

  

A根据您的示例:(假设一个八位数字被   “ /”)

Dim Result As String = Regex.Match(TextBox1.Text, "\/\d{8}\/").Value.Replace("/", String.Empty)

Result将包含您的号码(如果匹配),否则String.Empty

参考:Regex.Match Method

替代示例:

仅匹配长度为8到10的数字,并用“ /”括起来:"\/\d{8,10}\/"

仅匹配长度为4个或更多数字且用“ /”括起来的数字:"\/\d{4,}\/"

用“ /”括起来的任意长度的匹配数字:"\/\d+\/"