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

时间:2019-02-01 14:17:18

标签: 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上帮助我吗?给定的字符串返回此列表?

3 个答案:

答案 0 :(得分:1)

一种选择是使用Split的{​​{1}}方法

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

答案 1 :(得分:1)

这应该有效:

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)

答案 2 :(得分:0)

最简单的方法是使用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()

所以基本上,我们的正则表达式部分只有一个衬里。

正则表达式\(|\)的含义是:在()处拆分,其中括号由于其在正则表达式中的特殊含义而用\进行了转义。

[()]中包含所需字符的正则表达式[]稍短,将产生相同的结果。