Regex 使用正则表达式从字符串中提取数据行
我有几根弦,例如Regex 使用正则表达式从字符串中提取数据行,regex,vb.net,Regex,Vb.net,我有几根弦,例如 (3)_(9)--(11).(FT-2) (10)--(20).(10)/test--(99) 我正在尝试Regex.Match(此处我不知道)以获得如下列表: 第一个样本: 3 _ 9 -- 11 . FT-1 第二个样本: 10 -- 20 . 10 /test-- 99 所以括号里有几个数字,它们之间有任何文字。 有人能帮我在vb.net中做这个吗?给定字符串返回此列表?一个选项是使用[string] "(3)_(9)--(11).(FT-2)".Split('()
(3)_(9)--(11).(FT-2)
(10)--(20).(10)/test--(99)
我正在尝试Regex.Match(此处我不知道)以获得如下列表:
第一个样本:
3
_
9
--
11
.
FT-1
第二个样本:
10
--
20
.
10
/test--
99
所以括号里有几个数字,它们之间有任何文字。
有人能帮我在vb.net中做这个吗?给定字符串返回此列表?一个选项是使用
[string]
"(3)_(9)--(11).(FT-2)".Split('()')
另一个选项是匹配除(
和)
作为正则表达式,这将执行[^()]+
崩溃
"[^()]" ' Match any single character NOT present in the list “()”
"+" ' Between one and unlimited times, as many times as possible, giving back as needed (greedy)
您可以使用以下代码块来提取所有匹配项
Try
Dim RegexObj As New Regex("[^()]+", RegexOptions.IgnoreCase)
Dim MatchResults As Match = RegexObj.Match(SubjectString)
While MatchResults.Success
' matched text: MatchResults.Value
' match start: MatchResults.Index
' match length: MatchResults.Length
MatchResults = MatchResults.NextMatch()
End While
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
这应该起作用:
Dim input As String = "(3)_(9)--(11).(FT-2)"
Dim searchPattern As String = "\((?<keep>[^)]+)\)|(?<=\))(?<keep>[^()]+)"
Dim replacementPattern As String = "${keep}" + Environment.NewLine
Dim output As String = RegEx.Replace(input, searchPattern, replacementPattern)
Dim输入为字符串=“(3)-(9)-(11)。(FT-2)”
Dim searchPattern As String=“\((?[^)]+)\)(?最简单的方法是使用Regex.Split
(制定为一个小控制台测试):
所以基本上我们有一个用于正则表达式部分的一行程序
正则表达式\(|\)
的意思是:在(
或)
处拆分,其中大括号因其在正则表达式中的特殊含义而用\
转义
稍微短一点的regex[()]
会产生同样的结果。首先,我很惊讶string.split会以这种方式工作(尽管它可能必须是……split(())as'被识别为注释?但输出是“”(空)3)\u9)--11).FT-2)代码块抑制了第一个匹配(3),但我明白了重点,可以进一步调查。谢谢you@StefanMeyer-拆分示例实际上是Powershell,但它使用.Net库来执行拆分。我假设语法大致相同,但似乎存在一些差异(我的vb.Net不存在)
Dim input = {"(3)_(9)--(11).(FT-2)", "(10)--(20).(10)/test--(99)"}
For Each s As String In input
Dim parts = Regex.Split(s, "\(|\)")
Console.WriteLine($"Input = {s}")
For Each p As String In parts
Console.WriteLine(p)
Next
Next
Console.ReadKey()