根据数组中的字符串拆分字符串

时间:2017-04-11 17:54:25

标签: arrays string vb.net list split

给出一个字符串......

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放入数组中,然后使用该数组拆分字符串?

3 个答案:

答案 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)

请记住确保数据始终成对,并且每个元素都用空格分隔。

祝你好运!