Справка по регулярным выражениям - сумма чисел в строке? - PullRequest
0 голосов
/ 10 июля 2010

Не уверен, что это лучший подход, но у меня есть строка, которая представляет ориентацию некоторых блоков.Например, «3V6V» означает ряд из 3 вертикальных блоков и ряд из 6 вертикальных блоков.«3V6V6V» означает ряды 3, 6, 6, все по вертикали.«4H4H4H4H» будет 4 ряда по 4 горизонтальных блока.т.е. каждые 2 символа составляют строку.Каждый элемент будет иметь только горизонтали или вертикали, без смешивания и сопоставления.Что мне нужно сделать здесь, это добавить сумму цифр, чтобы определить общее количество блоков.Как я могу это сделать?Я думал сделать что-то вроде string.split (), а затем, если элемент массива - это число, добавить его к промежуточной сумме.Есть ли лучший подход к этому?«4H4H4H4H» будет 16, а «3V6V6V» будет 15. Может ли кто-нибудь указать мне правильное направление?Должен быть довольно простой способ сделать это.

Спасибо,
~ ck в Сан-Диего

Ответы [ 2 ]

2 голосов
/ 10 июля 2010
int sum = Regex.Split(input, "[HV]")
                .Where(s => !string.IsNullOrEmpty(s))
                .Select(s => int.Parse(s))
                .Sum();

Обратите внимание, что приём будет некорректным, например, «3H3» или «3H6V»

РЕДАКТИРОВАТЬ: На самом деле вы можете упростить это с помощью String.Split:

int sum = input.Split(new[] { 'H', 'V' }, StringSplitOptions.RemoveEmptyEntries)
    .Sum(str => int.Parse(str));
0 голосов
/ 10 июля 2010

RegExp, который я бы использовал (не проверено):

((\d+)(?<type>[HV]))((\d+)\k<type>)*

Посредством \ k вы гарантируете, что в строке есть только Hs или Vs, но не смешанные. Возвращаемым значением, вероятно, является массив, так что вы можете легко суммировать числа.

...