2

我想得到如下所示的六个七位数的动态数字:

id="tid_3660328">

并将它们附加到 TextBox1 的末尾。


也就是说,我想得到号码:3660328

从之间:id="tid_

和:>


我的问题是如何在 VB.NET 中做到这一点。我的第一个想法是“正则表达式”,这是我零经验的话题。我很感激帮助。

注意:我想我可以在这里使用代码,但使用我自己的正则表达式:https ://stackoverflow.com/a/9332731

4

2 回答 2

4

这是使用 RegEx 的好地方。

如果你只想找到正好是七位数的数字,你可以使用这个 RegEx 模式:

id="tid_(\d{7})">

或者,如果您不在乎它有多少位,您可以使用以下模式:

id="tid_(\d+)">

以下是该模式的含义:

  • id="tid_- 匹配的字符串必须以此文本开头
  • (...)- 创建一个组,以便我们稍后可以访问匹配的这一部分的值。
  • \d- 任何数字字符
  • {7}- 连续七个数字字符
  • ">- 匹配的字符串必须以此文本结尾

在第二种模式中,+替换{7}just 的 表示一个或多个而不是恰好七个。

在 VB.NET 中,您可以使用 RegEx 模式搜索输入字符串,如下所示:

Public Function FindNumbers(input As String) As List(Of String)
    Dim numbers As New List(Of String)()
    Dim pattern As String = "id=""tid_(\d{7})"">"
    For Each i As Match In Regex.Matches(input, pattern)
        numbers.Add(i.Groups(1).Value)
    Next
    Return numbers
End Function

请注意,在 VB 中的字符串文字中,您必须通过将引号加倍来转义它们。您还会注意到i.Value,我们使用的是 ,而不是 using i.Groups(1).Value。原因是i.Value它将等于整个匹配的字符串(例如id="tid_3660328">),而组 1 将仅等于数字部分(例如3660328)。

更新

要在下面回答您的问题,调用此函数并将其输出到 a TextBox,您可以执行以下操作:

Dim numbers As List(Of String) = FindNumbers("id=""tid_3660328"">")
Text1.Text = String.Join(Environment.NewLine, numbers.ToArray())
于 2013-11-08T19:18:10.547 回答
2

考虑以下正则表达式...

(?<=tid_).*?(?=\"\>)

解释:

  • (?<=tid_) : 匹配前缀 tid_ 但将其从捕获中排除
  • .*? : 任意字符,任意重复次数,尽可能少
  • (?=\">) :匹配后缀 "> 但将其从捕获中排除
于 2013-11-08T19:12:50.297 回答