[英]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.