我正在尝试从一组HTML字符串中过滤掉特定文本,但我在编写代码时无法在Visual Basic中执行此操作。我试图解决的问题是;
< NAME = SECT1>< B个JOHN< / B个;< / A>
<名称= 1.1.10>你有一个美好的夜晚吗?< / A>< BR>
由此我只想附加以下内容;
JOHN
你有一个美好的夜晚吗?**注意:我必须输入一些额外的空格,以防止转换为HTML。
我试图编写一些不同的子例程来在第二个">"之间附加文本。和第三"<"如果第9个字符是" S"并在第一个">"之间追加文字。和第二"<"如果第9个字符不是" S"。
这是我一直在尝试的主要想法,但我还没有找到合适的代码放入Then。
For Each line As String In AnalyzedText
Dim chars() = line.ToCharArray
If chars.Length >= 9 AndAlso chars(8) = "S"c Then
'Not sure what would go here
ElseIf chars.Length >= 9 AndAlso chars(8) <> "S"c Then
'Not sure what would go here
End If
Next
我很抱歉我无法取得更多进展,但老实说我不知道从哪里开始并尝试了我能想到的一切。我们将非常感谢您的任何帮助或想法。
答案 0 :(得分:0)
我尝试使用您的尝试并从中创建了一个正在运行的版本。但是一旦某些内容发生变化,代码就会中断。
如果&lt; A NAME = 1.1.10&gt;是&lt; A NAME = 1.1.9&gt;代替?长度不合适。您可以使用不使用硬编码长度但使用'&gt;'的子字符串来解决这个问题。迹象。将IndexOf和LastIndexOf与子串组合使用多次。
如果标签不是两个中的一个,会发生什么?你可以抛出异常
我建议使用正则表达式来解决这类问题。看一下正则表达式。您可以使用在线正则表达式跑步者进行测试。这是一个比我提议的更清洁的解决方案
转轮: http://www.myregextester.com/
这里是你的例子的代码。请注意,它会在我描述的条件下中断。如果您的问题有进一步的进展,我可以再次帮助您。我希望这能帮助你找到正确的方向。
Dim inputList As List(Of String) = New List(Of String)()
Dim outputList As List(Of String) = New List(Of String)()
Dim sectAsStringLengthBefore As Integer = "< A NAME=SECT1>< B>".Length
Dim sectAsStringLengthAfter As Integer = "< /B>< /A>".Length
Dim sectAsStringMinimumLength As Integer = sectAsStringLengthBefore + sectAsStringLengthAfter
Dim sectAsNumericLengthBefore As Integer = "< A NAME=1.1.10>".Length
Dim sectAsNumericLengthAfter As Integer = "< /A>< br>".Length
Dim sectAsNumericMinimumLength As Integer = sectAsNumericLengthBefore + sectAsNumericLengthAfter
inputList.Add("< A NAME=SECT1>< B>JOHN< /B>< /A>")
inputList.Add("< A NAME=1.1.10>Have you had a good night?< /A>< br>")
For Each line As String In inputList
If line.Length >= sectAsStringMinimumLength AndAlso line(9) = "S"c Then
outputList.Add(line.Substring(sectAsStringLengthBefore, line.Length - sectAsStringMinimumLength))
ElseIf line.Length >= sectAsNumericMinimumLength AndAlso line(9) <> "S"c Then
outputList.Add(line.Substring(sectAsNumericLengthBefore, line.Length - sectAsNumericMinimumLength))
End If
Next