正则表达式在两个字符串之间获取文本

时间:2013-11-08 18:52:13

标签: regex vb.net .net-4.0

我想获得动态七位数字,如下所示:

id="tid_3660328">

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


换句话说,我想得到这个号码:3660328

从中间:id =“tid _

和:“>


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

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

2 个答案:

答案 0 :(得分:4)

这是使用RegEx的好地方。

如果您只想查找正好七位数的数字,可以使用此RegEx模式:

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

或者,如果你不关心它的位数,你可以使用这种模式:

id="tid_(\d+)">

这是模式的含义:

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

在第二种模式中,取代+的{​​{1}}只表示一个或多个而不是七个。

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

{7}

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

更新

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

TextBox

答案 1 :(得分:1)

考虑以下Regex ......

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

说明:

  • (?&lt; = tid_):匹配前缀tid_但将其从捕获中排除
  • 。*? :任何角色,任意数量的重复,尽可能少
  • (?= \“&gt;):匹配后缀”&gt;但将其从捕获中排除