使用RegEx从字符串中提取数据行

5sxhfpxr  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(193)

我有几个字符串,例如。

(3)_(9)--(11).(FT-2)
(10)--(20).(10)/test--(99)

我正在尝试Regex.Match(这里我不知道)得到这样的列表:第一个样品:

3
_
9
--
11
.
FT-1

第二个样品:

10
--
20
.
10
/test--
99

所以括号里有几个数字,它们之间有文本,有人能帮我在www.example.com中做这个vb.net??

6qfn3psc

6qfn3psc1#

一个选项是使用[String]Split方法

"(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
6qqygrtg

6qqygrtg2#

这应该可行:

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)
13z8s7eq

13z8s7eq3#

最简单的方法是使用Regex.Split(公式化为一个小控制台测试):

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

基本上,我们有一行代码用于regex部分。
正则表达式\(|\)表示:在()处拆分,其中大括号使用\转义,因为它们在正则表达式中具有特殊含义。
稍短的正则表达式[()](其中所需的字符包含在[]中)将产生相同的结果。

相关问题