Vb.net 解析字符串-“;包括「;不足

Vb.net 解析字符串-“;包括「;不足,vb.net,Vb.net,我使用此代码检查另一个字符串中是否有字符串: If StringData(1).Contains("-SomeText2.") Then 'some code End If 'StringData(1) looks like this: '-SomeText1.1401-|-SomeText2.0802-|-SomeText3.23-|-SomeText4.104-| 'In case I look for -SomeText1. I need 1401 'In case I look

我使用此代码检查另一个
字符串中是否有
字符串

If StringData(1).Contains("-SomeText2.") Then
    'some code
End If

'StringData(1) looks like this:
'-SomeText1.1401-|-SomeText2.0802-|-SomeText3.23-|-SomeText4.104-|
'In case I look for -SomeText1. I need 1401
'In case I look for -SomeText2. I need 0802
'In case I look for -SomeText3. I need 23
'In case I look for -SomeText4. I need 104
我首先检查
-SomeText2.
是否在
StringData(1)
中,如果是,我需要获取文本的下一部分:
0802
这是我不知道如何做的部分,我该如何做?

所有字符串由
|
分隔,所有子字符串以
-
开头和结尾,并有一个
分隔第一部分和第二部分。我检查了所有的字符串,从代码< > />代码>结尾>代码> ./COD>,因为中间有一些代码> >代码>和<代码> <代码>,所以<代码>分割< /代码>函数不起作用。


这些字符串经常更改,因此无论字符串的长度如何,我都需要一些东西来检查它。

我只需将字符串拆分,然后在搜索文本中找到“.”和“-”之间的文本,如下所示:

    Dim str As String = "-SomeText1.1401-|-SomeText2.0802-|-SomeText3.23-|-SomeText4.104-"
    Dim searches() As String = {"-SomeText1", "-SomeText2", "-SomeText3", "-SomeText4"}
    For Each search As String In searches
        For Each value As String In str.Split(CChar("|"))
            If value.Contains(search) Then
                Dim partIwant As String = value.Substring(value.IndexOf(".") + 1, value.Length - value.IndexOf(".") - 2)
                MsgBox(partIwant)
                'Outputs: 1401, 0802, 23, 104
                Exit For
            End If
        Next
    Next

在本例中,我们只使用查看搜索字符串是否存在……我们实际上无法使用该函数获取任何进一步的信息,因为它返回的所有信息都是True或False。因此,一旦我们知道我们的字符串已经找到,就只需要对字符串进行一些操作,以获取“.”和“-”字符之间的文本。将获取句点的索引,然后我们只需将文本拉到句点和字符串的最后一个字符之间。

我只需将字符串拆分,然后在搜索文本中找到“.”和“-”之间的文本,如下所示:

    Dim str As String = "-SomeText1.1401-|-SomeText2.0802-|-SomeText3.23-|-SomeText4.104-"
    Dim searches() As String = {"-SomeText1", "-SomeText2", "-SomeText3", "-SomeText4"}
    For Each search As String In searches
        For Each value As String In str.Split(CChar("|"))
            If value.Contains(search) Then
                Dim partIwant As String = value.Substring(value.IndexOf(".") + 1, value.Length - value.IndexOf(".") - 2)
                MsgBox(partIwant)
                'Outputs: 1401, 0802, 23, 104
                Exit For
            End If
        Next
    Next

在本例中,我们只使用查看搜索字符串是否存在……我们实际上无法使用该函数获取任何进一步的信息,因为它返回的所有信息都是True或False。因此,一旦我们知道我们的字符串已经找到,就只需要对字符串进行一些操作,以获取“.”和“-”字符之间的文本。将为我们获取句点的索引,然后我们只需将文本拉到句点和字符串的最后一个字符之间。

您的问题与WPF无关,因此标签和标题具有误导性

要解决问题,应该使用
String.IndexOf(String)
而不是
String.Contains(String)
。这将告诉您给定字符串的起始位置。如果该值为-1,则表示原始字符串根本不包含搜索字符串

一旦有了起始索引,就可以使用
String.IndexOf(String,int)
来搜索下一个出现的
-
,这样就可以知道条目停止的位置。第二个参数告诉它应该从哪个索引开始搜索,在本例中,您应该从找到第一个匹配项的索引开始搜索

现在您已经知道了匹配项的起始索引、条目的结束索引和搜索字符串的长度,您可以将它们放在一起,轻松地使用
string.Substring(int,int)
获取您感兴趣的字符串部分


这是一个直截了当、天真的解决方案。更复杂的解决方案是为搜索字符串构建一个正则表达式,该正则表达式的构建方式使您感兴趣的部分包含在捕获组中。但这是一个更复杂的话题。

你的问题与WPF无关,因此标签和标题具有误导性

要解决问题,应该使用
String.IndexOf(String)
而不是
String.Contains(String)
。这将告诉您给定字符串的起始位置。如果该值为-1,则表示原始字符串根本不包含搜索字符串

一旦有了起始索引,就可以使用
String.IndexOf(String,int)
来搜索下一个出现的
-
,这样就可以知道条目停止的位置。第二个参数告诉它应该从哪个索引开始搜索,在本例中,您应该从找到第一个匹配项的索引开始搜索

现在您已经知道了匹配项的起始索引、条目的结束索引和搜索字符串的长度,您可以将它们放在一起,轻松地使用
string.Substring(int,int)
获取您感兴趣的字符串部分


这是一个直截了当、天真的解决方案。更复杂的解决方案是为搜索字符串构建一个正则表达式,该正则表达式的构建方式使您感兴趣的部分包含在捕获组中。但这是一个更复杂的主题。

您忘记解释如何使用
IndexOf
而不是
Contains
。这将使它成为一个有用的答案。非常感谢,它真的很有帮助:D@soohingan包含指向您介绍的实体文档的链接通常很有帮助,例如。稍后,其他读者可能会更容易发现IndexOf方法还有其他重载,使他们能够(比如)执行不区分大小写的IndexOf。您忘记了解释如何使用
IndexOf
而不是
Contains
。这将使它成为一个有用的答案。非常感谢,它真的很有帮助:D@soohingan包含指向您介绍的实体文档的链接通常很有帮助,例如。稍后其他读者可能会更容易发现IndexOf方法还有其他重载,使他们能够执行(比如)不区分大小写的IndexOf。您好,感谢您的回答,我添加了WPF部分,因为我知道有些函数在WPF应用程序中不可用,因为它们在本机VB.NET应用程序中不可用,有些函数具有等效功能,而另一些函数需要解决方法,尽管我已将其从标题和标记中删除。您好,感谢您的回答,我添加了WPF部分,因为我知道有些函数在WPF应用程序中不可用,因为它们在本机VB.NET应用程序中不可用,有些函数具有等效功能,而另一些函数需要解决方法,我从标题和标签中删除了它