Добавить дополнительный (?:\.\d+)?
соответствие 1 или 0 вхождений .
следует с 1 или более цифр:
(?:Avg|Max|Min)[OHLVC]\d+(?:\.\d+)?
^^^^^^^^^^
Смотрите regex demo
(?:...)?
является необязательным non-capturing group. Это необязательно (= соответствует одному или нулевому вхождению) из-за квантора ?
(жадный, поэтому я упоминаю один или ноль, а не ноль или один). Группа без захвата используется для целей группировки без создания буфера для захваченного значения в памяти. Я предложил использовать группу non, поскольку итоговый результат должен быть равен всего значения соответствия, поэтому нет необходимости отслеживать и хранить эти значения.
Примечание на NON/захвата групп в .NET: В коде .NET, вы можете использовать пронумерованные захватив группы и сделать их не-захват с помощью RegexOptions.ExplicitCapture
флага. Затем буферы памяти создаются только для названных групп захвата (например, (?<gr1>...)
). Подробнее
Pattern:
(?:Avg|Max|Min)
- Либо Avg
, Max
или Min
[OHLVC]
- одна заглавная буква из множества
\d+
- 1 или более цифр
(?:\.\d+)?
- необязательный последовательность .
с последующим 1 или более ди мерзавцы.
Sidenote: это лучшая практика, чтобы запретить ветви одного и того же чередованием группы, чтобы соответствовать на одном и том же месте, и (?:Avg|Max|Min)
лучше записать в виде (?:Avg|M(?:ax|in))
. Однако то, что хорошо для машины, не так хорошо для человеческого глаза, поэтому из-за соображений читаемости я бы посоветовал сохранить первую группу как есть.
C# demo (обратите внимание, что RegexOptions.ExplicitCapture
передается с помощью опции встроенного (?n)
):
var s = "(AvgC20.1 > 980000) && (C1>C2) MaxC20 MinC20.14";
var pattern = @"(?n)(Avg|Max|Min)[OHLVC]\d+(\.\d+)?";
var result = Regex.Matches(s, pattern)
.Cast<Match>()
.Select(p => p.Value)
.ToList();
foreach (var r in result) // Demo printing the results
Console.WriteLine(r);
Может быть, вы должны объяснить, почему ':' необходимо. Начинающие не будут знать, что круглые скобки - это больше, чем просто способ группировки символов. –
Хорошо, я добавляю дополнительную информацию об этом. –
\ d + должно быть \ d? – jdweng