0

文字列変数に大きな値があり、その一部だけを保持したいのですが、データが配置されている文字列内の正確な位置はいつでも変化する可能性があるためわかりませんが、特定の間にあることはわかっていますタグなので、どうすればそれらのタグの中にあるものだけを保持できますか?

私が持っている文字列の種類の例:

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

4 に答える 4

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 を読み込み、その方法で解析することができます。

于 2012-10-17T19:57:28.350 に答える
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)
于 2012-10-17T20:00:59.563 に答える
1

XML ドキュメント内のノードの値を探している場合は、 や など、.NET に組み込まれている XML ドキュメント パーサーのいずれかを使用する方がはるかに優れていXmlDocumentますXDocument。たとえば、次のようにしますXmlDocument

Dim doc As New XmlDocument()
doc.LoadXml(var)
Dim stuffIDoNeed As String = doc.SelectSingleNode("/random/stuffIDoNeed").InnerXml
于 2012-10-17T21:47:30.550 に答える
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)
于 2012-10-17T20:17:30.990 に答える