Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式从字符串中提取数据行_Regex_Vb.net - Fatal编程技术网

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()