正则表达式通过START-END模式找到字符串,使用"选项"

时间:2017-10-24 10:58:37

标签: .net regex vb.net

我知道标题可能令人困惑,所以这就是我需要做的事情:

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")结束 - 没有模式本身

抱歉:可能会产生误导,输出字符串不一定是数字!

3 个答案:

答案 0 :(得分:1)

您可以使用

捕获数字
-\+-(.*?)\.(?:iam|ipt)

请参阅regexstorm demo。您也可以将其写为-\+-(.*?)\.i(?:am|pt),以使其更有效但可读性更低。

<强>详情

  • -\+- - -+-文字子字符串
  • (.*?) - 除了换行符之外的任何0 +字符
  • \. - 一个点
  • (?:iam|ipt) - iamipt substring

enter image description here

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