我需要从长字符串行中获取某个字符,这种字符不止一次出现。这就是字符串的样子:
<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
答案 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;”