簡體   English   中英

在Visual Basic中分解字符串

[英]Break apart string in visual basic

我有多個要從文件導入的字符串。 字符串的格式如下:

Smith, Tom 1/2/62 45484

[Last Name], [First Name] [Date] [Number]

我需要一種將這些分解為四個變量的方法。

Dim first_name as string = first name ,等等。

我以為我可以使用正則表達式,但是我一直用它來碰壁。

謝謝你的幫助!

是的,RegEx是一個很好的選擇。 您可以在VB中執行以下操作:

Dim input As String = "Smith, Tom 1/2/62 45484"
Dim pattern As String = "(?<last>.*?), (?<first>.*?) (?<date>\S+) (?<number>\d+)"
For Each m As Match In Regex.Matches(input, pattern)
    Dim last As String = m.Groups("last").Value
    Dim first As String = m.Groups("first").Value
    Dim [date] As String = m.Groups("date").Value
    Dim number As String = m.Groups("number").Value
Next

您可能需要調整模式以適應您的需求。 這就是我演示的模式的含義:

  • (?<last>.*?) -捕獲字符串的姓氏部分
    • ( -開始一個捕獲小組
    • ?<last> -為捕獲組命名
    • . -任何字符
    • *? -任意次數(任意長度的字符),非貪婪。 放置? *之后的*表示不貪心。 非貪婪只是意味着它將捕獲盡可能少的字符串(即僅捕獲到第一個逗號而不是最后一個逗號)
    • ) -結束捕獲組
  • , -名字和姓氏之間必須有一個逗號后跟一個空格
  • (?<first>.*?) -捕獲名字。 .*? 捕獲任何字符的任何長度,非貪婪。
  • -名字和日期之間必須有一個空格
  • (?<date>\\S+) -捕獲日期。 \\S+捕獲一個或多個非空白字符。
  • -日期和數字之間必須有一個空格
  • (?<number>\\d+) -捕獲數字。 \\d+捕獲一個或多個數字字符。

我使用命名組,以使代碼更清晰易讀。 您也可以只使用編號的組,然后通過索引讀取它們(例如m.Groups(0).Value )。

另外,我使用循環查看Matches所有Matches 但是,如果您一次只給RegEx一行,或類似的內容,其中輸入只能包含一個匹配項,則可以改用Match方法,這樣會容易一些:

Dim m As Match = Regex.Match(input, pattern)
If m.Success Then
    Dim last As String = m.Groups("last").Value
    Dim first As String = m.Groups("first").Value
    Dim [date] As String = m.Groups("date").Value
    Dim number As String = m.Groups("number").Value
End If

您還可以使用正則表達式和LINQ使用不同的方法:

Dim person As String = "Smith, Tom 1/2/62 45484"
Dim rxPerson As Regex = New Regex("(?<lastname>[\p{L}\s]+),\s+(?<firstname>[\p{L}\s]+)\s+(?<date>[\d/]+)\s+(?<id>\d+)")
Dim matches_prs As IEnumerable(Of Match) = rxPerson.Matches(person).Cast(Of Match)().Select(Function(m) m)
Dim result = (From match In matches_prs
           Select New With {.lastname = match.Groups("lastname").Value,
                        .firstname = match.Groups("firstname").Value,
                        .date = match.Groups("date").Value,
                        .id = match.Groups("id").Value}).ToList()

結果:

在此處輸入圖片說明

正則表達式匹配:

  • (?<lastname>[\\p{L}\\s]+) -僅包含Unicode字母和空格的姓氏
  • ,\\s+ -一個逗號和一個或多個空格,用於分隔姓氏和名字
  • (?<firstname>[\\p{L}\\s]+) -僅包含Unicode字母和空格的名字
  • \\s+ -1個或多個空格分隔名稱和日期
  • (?<date>[\\d/]+) -日期元素
  • \\s+ -1個或多個空格,用於分隔日期和ID
  • (?<id>\\d+) -僅由數字組成的id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM