我的格式为原始数据:
<&安培; 70> 1 +><&安培; 10 -10 1 +> 0.002<&安培; 70> 1 +> B<&安培; 70> 1 +>一种与LT; + GT;<&安培; 90>
我想使用VB提取<
和>
之间的上下文,并将它们存储在数组中,例如{&70,+,&10,+, ... }
然后我想对不在括号之间的项目做同样的事情,也存储在像{.002, B, A}
这样的数组中
有谁知道如何使用正则表达式来做到这一点?
答案 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)