簡體   English   中英

VB正則表達式提取括號之間的字符串並存儲在數組中

[英]VB regex extract strings between brackets and store in array

我有以下格式的原始數據:

<&70> <+> <&10> <+>。002 <&70> <+> B <&70> <+> A <+> <&90>

我想使用VB提取<>之間的上下文並將它們存儲在數組中,例如{&70,+,&10,+, ... }

然后,我想對不在括號之間的項目執行相同的操作,也將其存儲在{.002, B, A}這樣的數組中

有誰知道我如何使用正則表達式來做到這一點?

預先存儲在數組中可能會很困難,因為您不知道它們的大小。 但是您可以改用List(Of String) (如果真正需要,可以在最后一步調用ToArray extension method

使用sln給定的正則表達式(為什么比我做的要好得多),您需要使用Regex.Matches (或實例副本,如果您想預先創建並編譯正則表達式) 遍歷數據中的所有匹配項
然后,如果當前匹配項具有指示的組(如sln的正則表達式說明中所示,為1或2),則將其添加到相應的列表中。

Dim rawData As String = "<&70><+><&10><+>.002<&70><+>B<&70><+>A<+><&90>"

Dim betweenBrackets As New List(Of String)
Dim outsideBrackets As New List(Of String)

For Each m As Match In Regex.Matches(rawData, "<([^>]*)>|((?:(?!<[^>]*>)[\S\s])+)")
    If m.Groups(1).Success Then betweenBrackets.Add(m.Groups(1).Value)
    If m.Groups(2).Success Then outsideBrackets.Add(m.Groups(2).Value)
Next

我將在全局搜索中同時執行這兩個操作。
如果第1組匹配,則推入括號數組,
如果第2組匹配,則推入非括號數組。

 # <([^>]*)>|((?:(?!<[^>]*>)[\S\s])+)

   < 
   ( [^>]* )                     # (1)
   >
|  
   (                             # (2 start)
        (?:
             (?! < [^>]* > )
             [\S\s] 
        )+
   )                             # (2 end)

暫無
暫無

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

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