给出一个字符串......
M0 Apple Sauce M1 Peanut Butter M2 Porcupine M3 Quesadilla M4 Margarita
我怎么能把那个字符串拆分成..
M0 Apple Sauce
M1 Peanut Butter
M2 Porcupine
M3 Quesadilla
M4 Margarita
有没有办法将M0, M1,..., M4
放入数组中,然后使用该数组拆分字符串?
答案 0 :(得分:3)
完全归功于Wiktor Stribizew:
Imports System.Text.RegularExpressions
Public Class frmMain
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim stString As String = "M0 Apple Sauce M1 Peanut Butter M2 Porcupine M3 Quesadilla M4 Margarita"
Dim arrString() As String
arrString = Regex.Split(stString, "(?!^)(?=\bM\d+\b)")
For Each st As String In arrString
MessageBox.Show(st)
Next
End Sub
End Class
正则表达式解释:
正则表达式字符串在拆分方法中使用这一事实意味着您的正则表达式模式的目标是在字符串中查找要拆分的位置。
正则表达式字符串!?^
的第一段只是断言没有匹配'位置0我们确实在位置0处有匹配,但我们不想在输出中使用0长度的字符串,因此我们使用此规定。我将细分第二个子表达式?=\bM\d+\b
:
?=
用于说"我们在光标前面查看以下模式的匹配" - 不使用文字\b
补充说,匹配必须发生在字母数字字符位于非字母数字字符旁边(在这种情况下,始终是空格和M
);这是任何'字边界' M
确实是M
\d
匹配任何十进制数字+
表示此时一行中可能有任意数量的小数位数(一个或多个十进制数字)\b
个详细信息答案 1 :(得分:1)
使用Regex.Split方法使用正则表达式拆分部件。
Dim stringToSplit As String = "M0 Apple Sauce M1 Peanut Butter M2 Porcupine M3 Quesadilla M4 Margarita"
Dim stringParts = Regex.Split(stringToSplit, "(?!^)(?=\bM\d+\b)")
For i = 0 To stringParts.Length - 1
Console.WriteLine(stringParts(i))
Next
此代码将产生以下输出:
M0 Apple Sauce
M1花生酱
M2 Porcupine
M3 Quesadilla
M4 Margarita
答案 2 :(得分:0)
正则表达式对于这种不稳定的东西是一个很好的答案。但如果您不喜欢Regex,还有其他方法。 Step关键字可以执行此操作。
Dim sText As String = "M0 Apple Sauce M1 Peanut Butter M2 Porcupine M3 Quesadilla M4 Margarita"
Dim split() As String = sText.Trim.Split(" ")
Dim sResult As String = String.Empty
For i = 0 To UBound(split) Step 2
sResult &= split(i) & " " & split(i + 1) & vbCrLf
Next
MsgBox(sResult)
请记住确保数据始终成对,并且每个元素都用空格分隔。
祝你好运!