我真的有正则表达式的严重问题。我需要在两个字符串之间获取所有文本,在这种情况下,字符串为<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>
,但它不起作用。我知道我在这里犯了一个错误,但我不知道在哪里/如何。
任何答案都会非常有用。
答案 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