VB正则表达式在括号之间提取字符串并存储在数组中

时间:2015-06-17 21:01:05

标签: regex vb.net extract

我的格式为原始数据:

  

<&安培; 70> 1 +><&安培; 10 -10 1 +> 0.002<&安培; 70> 1 +> B<&安培; 70> 1 +>一种与LT; + GT;<&安培; 90>

我想使用VB提取<>之间的上下文,并将它们存储在数组中,例如{&70,+,&10,+, ... }

然后我想对不在括号之间的项目做同样的事情,也存储在像{.002, B, A}这样的数组中

有谁知道如何使用正则表达式来做到这一点?

2 个答案:

答案 0 :(得分:1)

在阵列中存储可能比较困难,因为你不知道它们的大小;但您可以使用List(Of String)代替(如果您真的需要,最后一步调用ToArray extension method

使用sln给出的正则表达式(为什么比我正在做的更好),您需要使用Regex.Matches(或者{{}} {{{{}}来遍历数据中的所有匹配项3}}如果你想先创建[并编译]正则表达式) 然后,如果当前匹配具有指示的组(如sln&#39;正则表达式解释中所示的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 :(得分:0)

我会在全球搜索中同时进行这两项操作 如果组1匹配,则推入支架阵列,
如果组2匹配,则推入非括号数组。

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

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