我有以下正則運算式:
/((?<=RGB:\s)\d*){1}[^,\s] /gm
以及使用它的以下文本:
RGB: 123, 12, 5
HSV: 23, 119, 223
7
我試圖讓它選擇“RGB:”之后的所有 3 個數字,但不包括“RGB:”或匹配中的空格和逗號。我對 RegEx 很陌生,我的表達似乎幾乎可以作業,但我被困在一個問題上。它只匹配第一個數字并停在逗號處。我不明白這是什么原因,在多次更改我的 RegEx 后我無法讓它作業。我這樣做的原因是,我可以輕松地將檔案中的許多這些數字替換為新數字。我使用的語言是 C#。
我正在嘗試做的事情:
RGB: 123, 12, 5
HSV: 23, 119, 223
7
(匹配"RGB:"后面的3個數字)
它實際上在做什么:
RGB: 123, 12, 5
HSV: 23, 119, 223
7
(它只匹配“RGB:”之后的第一個數字)
uj5u.com熱心網友回復:
我會匹配\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
uj5u.com熱心網友回復:
在 .NET Regex 中,您可以使用可變長度的lookbehind ( demo )。
(?<=RGB:[\s\d,]*)\d
或者用于在上一場比賽結束的地方\G繼續比賽的想法(演示)。
(?:RGB:|\G(?!^))[,\s]*(\d )
這需要一個捕獲組,但比第一個模式更有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/479801.html
