我需要从长字符串行中获取某个字符,该字符不止一次出现。这是字符串的样子:
<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
我认为这种纯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
假设它始终是相同的格式,您可以在一行中执行此操作。如果格式可能不同(例如随机数的空格等),正则表达式会更好
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)
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
,您始终可以删除最后的“>”