2

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

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

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

4

4 回答 4

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
于 2013-07-03T13:31:19.160 回答
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)
于 2013-07-03T13:44:52.253 回答
1

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

编辑:RegEx 表达式的创建可能很复杂。Expresso是一个可以帮助您解决问题的好工具。它将帮助您轻松创建和测试非常复杂的表达式。

于 2013-07-03T13:23:59.453 回答
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

请注意,由于最后的“>”被视为另一个分隔符,因此数组 ss 比按键次数长一个.split,您始终可以删除最后的“>”

于 2013-07-03T13:33:58.470 回答