我不确定我做错了什么。我有以下内容:
(?:[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 :(得分: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);
}
}