String.Split返回不正确的数组

时间:2015-03-31 19:52:28

标签: vb.net

尝试更正格式不正确的HTML表格。我无法控制源代码,我的应用程序只是将下载文件的内容作为常规文本文件加载。文件内容是一个简单的HTML表,缺少结束</tr>元素。我正在尝试拆分<tr>上的内容以获取一个数组,我可以</tr>到需要它的元素的末尾。当我尝试使用fleContents.Split("<tr>").ToList分割字符串时,我在结果List(Of String)中获得的元素比应该存在的要多得多。

这里我是一个显示相同行为的简短测试代码:

Dim testSource As String = "<table><tr><td>8172745</td><tr><td>8172745</td></table>"
Dim testArr As String() = testSource.Split("<tr>")

'Maybe try splitting on a variable because you can't use a string literal containging "<>" in the Split method
Dim seper as String = "<tr>"
testArr As String() = testSource.Split(seper)

'feed it a new string directly
testArr = testSource .Split(New String("<tr>"))

我希望testArr应该包含3个元素,如下所示:

  
      
  1. "<table>"
  2.   
  3. "<td>8172745</td>"
  4.   
  5. "<td>8172745</td></table>"
  6.   

但是,我收到以下数组:

  
      
  1. ""
  2.   
  3. "table>"
  4.   
  5. "tr>"
  6.   
  7. "td>8172745"
  8.   
  9. "/td>"
  10.   
  11. "tr>"
  12.   
  13. "td>8172954"
  14.   
  15. "/td>"
  16.   
  17. "/table>"
  18.   

有人可以解释一下为什么字符串会按照它们的方式分割,以及如何获得我期望的结果?

2 个答案:

答案 0 :(得分:1)

尝试使用像这样的正则表达式

Imports System.Text.RegularExpressions

Public Class Form1


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim testSource As String = "<table><tr><td>8172745</td><tr><td>8172745</td></table>"
        Dim testArr As String() = Regex.Split(testSource, "<tr>")

        'Show The Array in TextBox1
        TextBox1.Lines = testArr

    End Sub
End Class

所有最好的

答案 1 :(得分:1)

您的代码使用Split方法的不同重载,而不是您所期望的。您需要采用String[]StringSplitOptions参数的方法:

Dim testSource As String = "<table><tr><td>8172745</td><tr><td>8172745</td></table>"
Dim delimeter As String() = { "<tr>" }
Dim testArr As String() = _
    testSource.Split(delimeter, StringSplitOptions.RemoveEmptyEntries)

您可以在IDEOne上看到它:

http://ideone.com/pcw6aq