簡體   English   中英

vb.net 使用正則表達式拆分字符串

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

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