C#Regex仅在捕获组号后提取

时间:2016-04-25 13:39:04

标签: c# regex

我不确定我做错了什么。我有以下内容:

(?:[A-Z]{2}\d{2}\s)

这是因为我的字符串始终以两个高位字母和两位数字开头。之后我的数据与单词混合,我只想要我想要的数字AB12 (1,2,3 words, 4,5,6,7,8,9)并获得此AB12 (1,2,3,4,5,6,7,8,9)

我在尝试

(?:[A-Z]{2}\d{2}\s)([0-9]+)
然而,这不起作用。我是否接近实现目标?

1 个答案:

答案 0 :(得分:1)

要删除任何不是数字和逗号的字符,可以使用[^,\d\s]字符类,并使用(?<=\([^()]*)(?=[^()]*\))外观来断言括号内的位置:< / p>

(?<=\([^()]*)\s*[^,\d]+(?=[^()]*\))

请参阅regex demo

\s*有助于摆脱非数值前的可选(0+)空格。

如果您需要使用初始子模式精确上下文,请添加它:

(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\))
    ^^^^^^^^^^^^^^^^^

A C# demo

using System;
using System.IO;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        var str = "AB12 (1,2,3 words, 4,5,6,7,8,9)";
        var pat = @"(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\))";
        var res = Regex.Replace(str, pat, string.Empty);
        Console.WriteLine(res);
    }
}