从字符串中检索重新出现的字符

时间:2013-07-03 13:16:46

标签: vb.net string

我需要从长字符串行中获取某个字符,这种字符不止一次出现。这就是字符串的样子:

<Press T><Press Left><Press A><Press C><Press P><Press U><Press G><Press P><Press NumPad7><Press NumPad7><Press A>

我需要遍历每组<>'s并获取每次出现单词Press之后的信息。所以在这种情况下,我需要信息T, Left, A, C, P, etc

4 个答案:

答案 0 :(得分:2)

我认为这种纯String - 方法方法效率最高,但它要求格式严格:

Dim text = "<Press T><Press Left><Press A><Press C><Press P><Press U><Press G><Press P><Press NumPad7><Press NumPad7><Press A>"
Dim allKeys As New List(Of String)
Dim pattern = "Press "
Dim index = text.IndexOf(pattern)
While index >= 0
    index += pattern.Length
    Dim endIndex = text.IndexOf(">", index)
    If endIndex >= 0 Then
        Dim nextKey = text.Substring(index, endIndex - index)
        allKeys.Add(nextKey)
        index = text.IndexOf(pattern, endIndex + 1)
    Else
        Exit While
    End If
End While

Console.Write(String.Join(", ", allKeys))

输出:T, Left, A, C, P, U, G, P, NumPad7, NumPad7, A


以下是返回所有匹配项的Regex,您找到在第二组中按下的“键”:

pattern = "<Press ([^>]+)>"
Dim regex = New Regex( pattern, RegexOptions.Compiled And RegexOptions.IgnoreCase)
For Each match As Match In regex.Matches(text)
    Console.WriteLine(match.Groups(1))
Next

答案 1 :(得分:2)

假设它一直是相同的格式,你可以在一行中完成。如果格式有可能不同(例如,随机数量的空格等),正则表达式会更好。

Dim myString As String = "<Press T><Press Left><Press A><Press C><Press P><Press U><Press G><Press P><Press NumPad7><Press NumPad7><Press A>"
Dim character As String() = myString.Split(New String() {"<Press ", ">"}, StringSplitOptions.RemoveEmptyEntries)

答案 2 :(得分:1)

RegEx是正则表达式的缩写,是一种解析字符串的简单方法。 This site提供有关在.NET中使用RegEx的详细信息。这就是我学习的方式。如果您不熟悉,该网站还提供有关RegEx的良好信息。

编辑:RegEx表达式可能很复杂。 Expresso是一个很好的工具来帮助你解决这个问题。它可以帮助您创建和测试非常复杂的表达式,而且操作极少。

答案 3 :(得分:1)

    Dim s As String = "<Press T><Press Left><Press A><Press C><Press P><Press U><Press G><Press P><Press NumPad7><Press NumPad7><Press A>"
    Dim ss() As String = s.Replace("<Press ", "").Split(">"c)
    For i as integer = 0 to ss.count - 2
       Debug.Print(ss(i))
    Next

输出:

T
Left
A
C
P
U
G
P
NumPad7
NumPad7
A

请注意,由于最终的“&gt;”,数组ss比按键次数长一个被.split视为另一个分隔符,您可以随时删除最终的“&gt;”