我知道标题可能令人困惑,所以这就是我需要做的事情:
Dim str = "blablabla blabla text-+-123.ipt blablabla sometext-+-456.iam bla someothertext-+-789.ipt blabla thistext+++000.doc"
我想要的输出是一个数组/字符串列表:
123456789
目前我正在尝试:Regex.Matches (str, ".*\-\+\-(.*)[(.iam)(.ipt)]")
接近但不够接近:)
目标:返回以" - + - "开头的所有子串。并以(" .iam" OR" .ipt")结束 - 没有模式本身
抱歉:可能会产生误导,输出字符串不一定是数字!
答案 0 :(得分:1)
您可以使用
捕获数字-\+-(.*?)\.(?:iam|ipt)
请参阅regexstorm demo。您也可以将其写为-\+-(.*?)\.i(?:am|pt)
,以使其更有效但可读性更低。
<强>详情
-\+-
- -+-
文字子字符串(.*?)
- 除了换行符之外的任何0 +字符\.
- 一个点(?:iam|ipt)
- iam
或ipt
substring VB.net代码:
Dim matches As List(Of String) = Regex.Matches(text, "-\+-(.*?)\.i(?:am|pt)") _
.Cast(Of Match)() _
.Select(Function(m) m.Groups(1).Value) _
.ToList()
答案 1 :(得分:0)
const string pattern = @"[-][+][-](\d+)[.][ipt|iam]";
不是数字
const string pattern = @"[-][+][-]([^.]+)[.][ipt|iam]";
提取匹配
var matches = regex.Matches(input);
foreach (Match match in matches)
{
var content = match.Groups[1].Value;
}
OR
var results = matches.OfType<Match>().Select(m => m.Groups[1].Value).ToArray();
答案 2 :(得分:0)
感谢您的参与,找到了使用命名捕获组的解决方案:
Dim reg As New Regex("-\+-(?<Number>.*?)[(\.iam)(\.ipt)]")
Dim m = reg.Matches(str).Cast(Of Match).Select(Function(x) x.Groups("Number")).ToArray()