在两个字符串Regex VB.Net之间获取文本

时间:2016-06-04 13:05:59

标签: html regex vb.net

我真的有正则表达式的严重问题。我需要在两个字符串之间获取所有文本,在这种情况下,字符串为<span class="user user-role-registered-member"></span>

我搜索了很多问题(其中一些是在StackOverFlow上),并观看了YouTube教程,仍然无法得到它。

这是我认为可行的代码,但我不知道为什么不会。

Dim mystring As String = "<br>Terms of Service<br></br>Developers<br>"

Dim pattern1 As String = "(?<=<br>)(.*?)(?=<br>)"
Dim pattern2 As String = "(?<=</br>)(.*)(?=<br>)"

Dim m1 As MatchCollection = Regex.Matches(mystring, pattern1)
Dim m2 As MatchCollection = Regex.Matches(mystring, pattern2)
MsgBox(m1(0).ToString)
MsgBox(m2(0).ToString)

好的,所以这段代码运行得很好....与<br>。我尝试用span更改pattern1和pattern2的<br>,但它不起作用。我知道我在这里犯了一个错误,但我不知道在哪里/如何。

任何答案都会非常有用。

5 个答案:

答案 0 :(得分:3)

您也可以使用XML:

Dim s As String = "<span class=""user user-role-registered-member"">Keyboard</span>"
Dim doc As New System.Xml.XmlDocument
doc.LoadXml(s)
Console.WriteLine(doc.FirstChild.InnerText) ' Outputs: "Keyboard"

有理由不尝试使用RegEx match open tags except XHTML self-contained tags的正则表达式解析HTML。

答案 1 :(得分:2)

非常感谢您的回答。我自己找到了答案(感谢Evil Tak,我有了一个想法)。

Dim findtext As String = "(?<=<span class=""user user-role-registered-member"">)(.*?)(?=</span>)"
Dim myregex As String = "<span class=""user user-role-registered-member"">Keyboard</span>"
Dim doregex As MatchCollection = Regex.Matches(myregex, findtext)
MsgBox(doregex(0).ToString)

StackOverFlow非常强大...♥

答案 2 :(得分:1)

使用显式捕获组。以下应该做的工作:

Dim exp = "<span class=""user user-role-registered-member"">(?<GRP>.*)</span>"
Dim M = System.Text.RegularExpressions.Regex.Match(YourInputString, exp, System.Text.RegularExpressions.RegexOptions.ExplicitCapture)
If M.Groups("GRP").Value <> "" Then
  Return M.Groups("GRP").Value
End If

答案 3 :(得分:1)

这可以轻松而美观地完成工作。当跨度内没有文本时,赢得返回匹配,因此您无需担心空匹配。但它会返回只有空格的组。

<span class=""user user-role-registered-member"">(.+)</span>

测试here

答案 4 :(得分:0)

您的文字为xml,如果您能以可读和清晰的方式进行操作,为什么要使用Regex来修改字符串。
使用LINQ to XML

Dim htmlPage As XDocument = XDocument.Parse(downloadedHtmlPage)

Dim className As String = "user user-role-registered-member"
Dim value As String = 
    htmlPage.Descendants("span").
    Where(Function(span) span.Attribute("class").Value.Equals(className)).
    FirstOrDefault().
    Value

使用Accessing XML in Visual Basic

Dim htmlPage As XDocument = XDocument.Parse(downloadedHtmlPage)

Dim className As String = "user user-role-registered-member"
Dim value As String = 
    htmlPage...<span>.
    Where(Function(span) span.@class.Value.Equals(className)).
    FirstOrDefault().
    Value