我有一个字符串,格式如下:
[0:2]={1.1,1,5.1.2}
我的要求是在=
运算符之后将值括在花括号内,并将它们存储到字符串数组中。我曾尝试使用Substring()
和IndexOf()
方法拆分部分,但它确实有效。但我需要一种更清洁,更优雅的方式来通过正则表达式实现这一目标。
有没有人有线索来达到我的要求?
答案 0 :(得分:2)
以下是您完全的RegEx解决方案:
Dim input As String = "[0:2]={1.1,1,5.1.2}"
Dim match = Regex.Match(input, "\[\d:\d\]={(?:([^,]+),)*([^,]+)}")
Dim results = match.Groups(1).Captures.Cast(Of Capture).Select(Function(c) c.Value).Concat(match.Groups(2).Captures.Cast(Of Capture).Select(Function(c) c.Value)).ToArray()
不要认为它比标准拆分更具可读性:
Dim startIndex = input.IndexOf("{"c) + 1
Dim length = input.Length - startIndex - 1
Dim results = input.Substring(startIndex, length).Split(",")
答案 1 :(得分:1)
您可以使用正则表达式提取花括号内的值,然后使用普通的Split
:
Regex.Match("[0:2]={1.1,1,5.1.2}", "{(.*)}").Groups(1).Value.Split(","c)
答案 2 :(得分:0)
Dim s As String = "[0:2]={1.1,1,5.1.2}";
Dim separatorChar as char = "="c;
Dim commaChar as char = ","c;
Dim openBraceChar as char = "{"c;
Dim closeBraceChar as char = "}"c;
Dim result() as String =
s.Split(separatorChar)(1)
.trim(openBraceChar)
.trim(closeBraceChar)
.split(commaChar);
(假设它有效!在iPad上键入,因此无法轻松验证语法,但校长应该是合理的。)
编辑:更新为VB,因为在c#语法中显示了工作的.net方法。
答案 3 :(得分:-1)
如果你想使用正则表达式
Dim s() As String=Regex.match(str,"(={)(.*)(})").Groups(1).Tostring.split(',');