【问题标题】:Regex to get text between two strings正则表达式获取两个字符串之间的文本
【发布时间】:2013-11-08 18:52:13
【问题描述】:

我想得到动态的six七位数如下图:

id="tid_3660328">

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


也就是说,我要获取号码:3660328

来自:id="tid_

和:">


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

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

【问题讨论】:

标签: regex vb.net .net-4.0


【解决方案1】:

这是使用 RegEx 的好地方。

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

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

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

id="tid_(\d+)">

模式的含义如下:

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

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

在 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.Groups(1).Value,而不是i.Value。原因是i.Value 将等于整个匹配字符串(例如id="tid_3660328">),而组1 将仅等于数字部分(例如3660328)。

更新

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

Dim numbers As List(Of String) = FindNumbers("id=""tid_3660328"">")
Text1.Text = String.Join(Environment.NewLine, numbers.ToArray())

【讨论】:

  • 感谢您的帮助。如何调用此函数并将结果导出到 TextBox?
  • @KelvinZhang 我更新了我的答案以展示你如何做到这一点。
  • 最后,我想将您的代码应用到一个新的正则表达式: ------ 我已经尝试 'Dim postpattern As String = ""' 没有成功(注意我已将 'pattern' 更改为'postpattern' 以防止歧义)。我的正则表达式有什么问题吗?
  • < 字符对 RegEx 具有特殊含义,因此您需要使用 \ 字符对其进行转义。 (例如pattern = "\<blah>")避开尖括号也没有什么坏处。
【解决方案2】:

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

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

解释:

  • (?
  • .*? : 任意字符,任意重复次数,尽可能少
  • (?=\">) : 匹配后缀 "> 但将其从捕获中排除

【讨论】:

  • 所以我做了一些研究来理解正则表达式:所以 () 是具有标准和“。*?”的组。是通配符,对吧?那么 "?
  • 在上面的答案中添加了解释。如果您需要更多信息,请与我们联系。此外,您可以使用 expresso 之类的工具来构建新的正则表达式并理解现有的正则表达式。
  • 您的正则表达式的功能是否与 Steven 的不同,或者他们是否做同样的事情?如果是后者,我会有点糊涂。
  • Stevan 的正则表达式模式还将捕获前缀 tid_( 和 )">
猜你喜欢
  • 2017-06-16
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多