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]+)
然而,这是行不通的。为了实现我的目标,我甚至关闭了吗?
答
要删除这不是一个数字,一个逗号的任何字符,你可以使用[^,\d\s]
字符类,并使用(?<=\([^()]*)
和(?=[^()]*\))
lookarounds断言括号内的位置:
(?<=\([^()]*)\s*[^,\d]+(?=[^()]*\))
\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
请注意,您可以进一步将其调整为仅删除没有数字的字块,并将其保留为数字:['(?
这个问题不清楚。有什么要求?现在,我只能提出一个非常丑陋的['([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%))。 –
我需要从括号中删除非数字。 – JeremyA1