C#正则表达式提取后捕获组号只有

问题描述:

我不知道我做错了什么。我有以下内容:C#正则表达式提取后捕获组号只有

(?:[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]+) 

然而,这是行不通的。为了实现我的目标,我甚至关闭了吗?

+0

这个问题不清楚。有什么要求?现在,我只能提出一个非常丑陋的['([AZ] {2} \ d {2} \ s \()(?:\ s *,?\ s *(?:(\ d +)\ b | \ W +))* \)'](http://regexstorm.net/tester?p=(%5BA-Z%5D%7B2%7D%5CD%7B2%7D%5CS%5C()(%3F%3A %5CS *%2C%3F%5CS *(%3F%3A(%5CD%2b)的%5CB%7C%5CW%2B))*%5C)I = AB12 +(1%2C2%2C3 +字%2C + 4 %2C5 2C6%%2C7 2C8%2C9%))。 –

+0

我需要从括号中删除非数字。 – JeremyA1

要删除这不是一个数字,一个逗号的任何字符,你可以使用[^,\d\s]字符类,并使用(?<=\([^()]*)(?=[^()]*\)) lookarounds断言括号内的位置:

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

regex demo

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

如果需要精确的与您最初的子模式的情况下,添加:

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

一个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); 
    } 
} 
+1

谢谢,这正是我所需要的。我从来没有想过这一点。 – JeremyA1

+0

请注意,您可以进一步将其调整为仅删除没有数字的字块,并将其保留为数字:['(?