[英]vb.net Split string with regex
我需要在幾個規則上用正則表達式分割一個字符串,我在以前的帖子的幫助下做了一些事情,但我不知道如何完全做到這一點。
輸入字符串(故意寫得難看)是:
Berlin "New York"Madrid 'Frankfurt Am Main' Quebec Łódź München Seattle,Milano
拆分代碼是:
Dim subStrings() As String = Regex.Split(myText, """([^""]*)""|,| ")
這樣做的結果是:
0)
1)
2)Berlin
3)
4)New York
5)Madrid
6)'Frankfurt
7)Am
8)Main'
9)Quebec
10)Łódź
11)
12)
13)München
14)Seattle
15)Milano
簡而言之,字符串應該被“”(空格)和/或“,”字符和/或單引號或雙引號分割成數組。 引用的術語應視為單個單詞。 這意味着單引號中的術語(在第 6 位)將被視為與雙引號中的術語相同。 這樣,第 6 位的“Frankfurt Am Main”將是“一個詞”,與第 4 位的“New York”相同。此外,我想如果可以制作正則表達式,空匹配將不會進入 subStrings() 數組。 畢竟,給定示例的理想結果應該是:
0)Berlin
1)New York
2)Madrid
3)Frankfurt Am Main
4)Quebec
5)Łódź
6)München
7)Seattle
8)Milano
所以,請如果有人知道如何為我解決這個具體的正則表達式。
您可以使用Regex.Matches
和以下正則表達式來提取字符串:
"([^"]*)"|'([^']*)'|([^,\s]+)
請參閱正則表達式演示。
細節
"([^"]*)"
- "
,然后第 1 組匹配除"
之外的任何 0+ 個字符,然后"
|
- 或者'([^']*)'
- '
,然后第 2 組匹配除'
之外'
任何 0+ 個字符,然后是'
|
- 或者([^,\\s]+)
- 第 3 組:除,
和空格之外的任何 1+ 個字符VB.NET 代碼片段:
Dim text = "Berlin ""New York""Madrid 'Frankfurt Am Main' Quebec Łódź München Seattle,Milano"
Dim pattern As String = """([^""]*)""|'([^']*)'|([^,\s]+)"
Dim matches() As String = Regex.Matches(text, pattern) _
.Cast(Of Match)() _
.Select(Function(m) m.Groups(1).Value & m.Groups(2).Value & m.Groups(3).Value) _
.ToArray()
結果:
使用以下Regex.Split
方法可以獲得相同的Regex.Split
:
pattern = """([^""]*)""|'([^']*)'|[,\s]+"
Dim matches() As String = Regex.Split(text, pattern).Where(Function(m) Not String.IsNullOrWhiteSpace(m)).ToArray()
請參閱正則表達式演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.