我在String变量上有一个很大的值,我想保留其中一些,我不知道我的数据所在的String中的确切位置,因为它可能随时变化,但我知道它是在特定标签之间,我怎么能只保留这些标签内的内容?
我拥有的字符串类型示例:
Dim var as String = "
<random> <stuffIDontNeed> <x>1</x> <x>2</x> <x>3</x>
</stuffIDontNeed> <stuffIDoNeed> <x>a</x> <x>b</x> <x>c</x>
</stuffIDoNeed> </random> "
所有内容都在同一个字符串中我只使用了多行,因此完全没有滚动显示。
所以我想要做的就是从stuffIDoNeed开始到结束的地方,标记和所有内容,不仅仅是其中的值。
答案 0 :(得分:1)
Dim var as String = "<random> <stuffIDontNeed> <x>1</x> <x>2</x> <x>3</x> </stuffIDontNeed> <stuffIDoNeed> <x>a</x> <x>b</x> <x>c</x> </stuffIDoNeed> </random> "
Dim Start As Integer = var.IndexOf("<stuffIDoNeed>")
Dim End As Integer = var.IndexOf("</stuffIDoNeed>") + 15
Dim var NewString = var.SubString(Start, End - Start)
抓住<stuffIDoNeed>
开头的字符串中的位置。
接下来,抓住</stuffIDoNeed>
开头的字符串中的位置,然后在其中添加15以说明您要查找的文本的结尾。
最后,将Substring与Start位置一起使用,使用End - Start来获取要提取的字符串的长度。
NewString
将等于<stuffIDoNeed> <x>a</x> <x>b</x> <x>c</x> </stuffIDoNeed>
。
或者,如果您计划对提取的字符串中的值执行某些操作,则可以查看LINQ to XML并使用XDocument加载XML并以此方式解析它。
答案 1 :(得分:1)
这将从输入字符串中提取子字符串(请不要使用var作为变量名,这是令人困惑的)
Dim inputData as String = " " & _
"<random> <stuffIDontNeed> <x>1</x> <x>2</x> <x>3</x> " & _
"</stuffIDontNeed> <stuffIDoNeed> <x>a</x> <x>b</x> <x>c</x> " & _
"</stuffIDoNeed> </random> "
Dim result as string = string.Empty
Dim startPos = inputData.IndexOf("<stuffIDoNeed>")
Dim endPos = inputData.IndexOf("</stuffIDoNeed>")
if startPos > 0 AndAlso endPos > 0 andAlso endPos > startPos then
result = inputData.SubString(startPos, endPos + 15 - startPos)
end if
Console.WriteLine(result)
答案 2 :(得分:1)
如果您正在寻找XML文档中节点的价值,那么使用.NET中的一个内置XML文档解析器(例如XmlDocument
或XDocument
)要好得多。例如,以下是XmlDocument
:
Dim doc As New XmlDocument()
doc.LoadXml(var)
Dim stuffIDoNeed As String = doc.SelectSingleNode("/random/stuffIDoNeed").InnerXml
答案 3 :(得分:0)
如果您知道您的结构将始终如此,那么最好转换为XML。否则使用正则表达式,然后你可以适应它变得更复杂。它比IndexOf
方法更具可读性。例如:
Imports System.Text.RegularExpressions
.....
Dim var As String = "<random> <stuffIDontNeed> <x>1</x> <x>2</x> <x>3</x> </stuffIDontNeed> <stuffIDoNeed> <x>a</x> <x>b</x> <x>c</x> </stuffIDoNeed> </random> "
Dim g As Match = Regex.Match(var, "<stuffIDoNeed>(?<stuffIDoNeed>.*)</stuffIDoNeed>")
MsgBox(g.Groups("stuffIDoNeed").Value)