有没有办法将String变量从某个字符集修剪到另一个字符而不指定其位置?

时间:2012-10-17 19:13:05

标签: vb.net string

我在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开始到结束的地方,标记和所有内容,不仅仅是其中的值。

4 个答案:

答案 0 :(得分:1)

使用String.IndexOf Method方法。

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文档解析器(例如XmlDocumentXDocument)要好得多。例如,以下是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)