我有几个字符串,例如
(3)_(9)--(11).(FT-2)
(10)--(20).(10)/test--(99)
我正在尝试Regex.Match(在这里我不知道)来获得像这样的列表: 第一个样本:
3
_
9
--
11
.
FT-1
第二个样本:
10
--
20
.
10
/test--
99
所以方括号中有几个数字,中间有任何文本。 有人可以在vb.net上帮助我吗?给定的字符串返回此列表?
答案 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()
所以基本上,我们的正则表达式部分只有一个衬里。
正则表达式\(|\)
的含义是:在(
或)
处拆分,其中括号由于其在正则表达式中的特殊含义而用\
进行了转义。
[()]
中包含所需字符的正则表达式[]
稍短,将产生相同的结果。