如何使用 RegEx select 列表中的每个数字,但仅在特定字符集之后?
How to select each number in a list with RegEx, but only after a specific set of characters?
我有以下正则表达式:
/((?<=RGB:\s)\d*){1}[^,\s]+/gm
并在以下文本上使用它:
RGB: 123, 12, 5
HSV: 23, 119, 223
7
我正在尝试 select“RGB:”之后的所有 3 个数字,但不包括“RGB:”或匹配中的空格和逗号。我是 RegEx 的新手,我的表达似乎几乎可以正常工作,但我被困在一个问题上。它只匹配第一个数字并在逗号处停止。我不明白这是什么原因,在多次更改我的 RegEx 后我无法让它工作。我这样做的原因是我可以很容易地用新的数字替换文件中的许多数字。我使用的语言是C#。
我想做什么:
RGB: 123
, 12
, 5
单纯疱疹病毒:23、119、223
7
(匹配"RGB:"后的3个数字)
它实际上在做什么:
RGB: 123
, 12, 5
单纯疱疹病毒:23、119、223
7
(它只匹配“RGB:”之后的第一个数字)
我会在 \bRGB: (\d+, \d+, \d+)
上进行匹配,然后在逗号上拆分第一个捕获组以获得字符串数字数组。
var input = "RGB: 123, 12, 5\nHSV: 23, 119, 223\n7";
var pattern = @"\bRGB: (\d+, \d+, \d+)";
var match = Regex.Match(input, pattern).Groups[1].Value;
var rx = new Regex(@",\s*");
var nums = rx.Split(match);
Array.ForEach(nums, Console.WriteLine);
这会打印:
123
12
5
在 .NET Regex 中,您可以使用可变长度后视 (demo)。
(?<=RGB:[\s\d,]*)\d+
或者使用的想法\G
to continue where the previous match ended (demo)。
(?:RGB:|\G(?!^))[,\s]*(\d+)
这个需要 capturing group 但比第一个模式更有效。
我有以下正则表达式:
/((?<=RGB:\s)\d*){1}[^,\s]+/gm
并在以下文本上使用它:
RGB: 123, 12, 5
HSV: 23, 119, 223
7
我正在尝试 select“RGB:”之后的所有 3 个数字,但不包括“RGB:”或匹配中的空格和逗号。我是 RegEx 的新手,我的表达似乎几乎可以正常工作,但我被困在一个问题上。它只匹配第一个数字并在逗号处停止。我不明白这是什么原因,在多次更改我的 RegEx 后我无法让它工作。我这样做的原因是我可以很容易地用新的数字替换文件中的许多数字。我使用的语言是C#。
我想做什么:
RGB: 123
, 12
, 5
单纯疱疹病毒:23、119、223
7
(匹配"RGB:"后的3个数字)
它实际上在做什么:
RGB: 123
, 12, 5
单纯疱疹病毒:23、119、223
7
(它只匹配“RGB:”之后的第一个数字)
我会在 \bRGB: (\d+, \d+, \d+)
上进行匹配,然后在逗号上拆分第一个捕获组以获得字符串数字数组。
var input = "RGB: 123, 12, 5\nHSV: 23, 119, 223\n7";
var pattern = @"\bRGB: (\d+, \d+, \d+)";
var match = Regex.Match(input, pattern).Groups[1].Value;
var rx = new Regex(@",\s*");
var nums = rx.Split(match);
Array.ForEach(nums, Console.WriteLine);
这会打印:
123
12
5
在 .NET Regex 中,您可以使用可变长度后视 (demo)。
(?<=RGB:[\s\d,]*)\d+
或者使用的想法\G
to continue where the previous match ended (demo)。
(?:RGB:|\G(?!^))[,\s]*(\d+)
这个需要 capturing group 但比第一个模式更有效。