Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式获取两个字符串之间的文本_Regex_Vb.net_.net 4.0 - Fatal编程技术网

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

Regex 正则表达式获取两个字符串之间的文本,regex,vb.net,.net-4.0,Regex,Vb.net,.net 4.0,我想得到如下所示的动态六位七位数字: id="tid_3660328"> 并将它们附加到TextBox1的末尾 换句话说,我想得到号码:3660328 从:id=“tid_ 和:“> 我的问题是如何在VB.NET中实现这一点。我的第一个想法是“regex”,这是一个我没有任何经验的话题。我感谢你的帮助 注意:我想我可以在这里使用代码,但是使用我自己的正则表达式:考虑下面的正则表达式 (?<=tid_).*?(?=\"\>) (?):匹配后缀“>但将其从捕获中排除 这是使

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

id="tid_3660328">
并将它们附加到TextBox1的末尾


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

从:id=“tid_

和:“>


我的问题是如何在VB.NET中实现这一点。我的第一个想法是“regex”,这是一个我没有任何经验的话题。我感谢你的帮助


注意:我想我可以在这里使用代码,但是使用我自己的正则表达式:

考虑下面的正则表达式

(?<=tid_).*?(?=\"\>)
(?):匹配后缀“>但将其从捕获中排除

这是使用正则表达式的好地方

如果您只想查找正好是七位数的数字,可以使用以下正则表达式模式:

id=“tid(\d{7})”>
或者,如果您不在乎它有多少位数,您可以使用以下模式:

id=“tid”(\d+)”>
以下是模式的含义:

  • id=“tid”
    -匹配字符串必须以此文本开头
  • (…)
    -创建一个组,以便我们以后可以仅访问匹配的这一部分的值
  • \d
    -任何数字字符
  • {7}
    -一行七个数字字符
  • “>
    -匹配字符串必须以此文本结尾
在第二个模式中,取代
{7}
+
仅表示一个或多个而不是七个

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

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
Dim numbers As List(Of String) = FindNumbers("id=""tid_3660328"">")
Text1.Text = String.Join(Environment.NewLine, numbers.ToArray())
请注意,在VB中的字符串文字中,您必须通过将引号加倍来转义引号。您还将注意到,我们使用的不是
i.Value
,而是
i.Groups(1.Value
。原因是
i.Value
将等于整个匹配字符串(例如
id=“tid_3660328”
),而第1组仅等于数字部分(例如,
3660328

更新 要回答下面的问题,要调用此函数并将其输出到
文本框
,可以执行以下操作:

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
Dim numbers As List(Of String) = FindNumbers("id=""tid_3660328"">")
Text1.Text = String.Join(Environment.NewLine, numbers.ToArray())

有你需要的一切。数字总是六位数吗?例如,在你的例子中,它是七位数。所以我做了一些研究来理解正则表达式:So()是有条件的组,“*?”是通配符,对吗?是什么?在上面的答案中添加了解释。如果你需要更多信息,请告诉我。此外,您可以使用expresso之类的工具来构造新的正则表达式并理解现有的正则表达式。您的正则表达式的功能与Steven的不同,还是它们的功能相同?如果是后者,我会有点困惑。Stevan的正则表达式模式也会捕获前缀tid_z(and)“>谢谢你的帮助。我该如何调用此函数并将结果导出到文本框?@KelvinZhang我更新了我的答案,以展示如何做到这一点。最后,我想将您的代码应用到一个新的正则表达式:---我尝试了“Dim postpattern As String=”“”但没有成功(注意,我已将“pattern”更改为“postpattern”,以防止歧义)。我的正则表达式有什么问题吗?