Отказ от ответственности: используйте парсер, если у вас есть опция. Тем не менее ...
Это регулярное выражение, которое я использую (!) Для соответствия тэгам HTML:
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>
Это может быть не идеально, но я запустил этот код через lot HTML. Обратите внимание, что он даже ловит странные вещи, такие как , которые появляются в Интернете.
Думаю, чтобы он не соответствовал самодостаточным тегам, вы либо захотите использовать Kobi :
<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+(?
или просто объединить, если и если нет.
To downvoters: Это рабочий код из реального продукта. Я сомневаюсь, что кто-либо читает эту страницу, создается впечатление, что социально приемлемо использовать регулярные выражения для HTML.
Предостережение. Я должен заметить, что это регулярное выражение все еще ломается при наличии блоков CD87, комментариев и элементов сценария и стиля. Хорошая новость заключается в том, что вы можете избавиться от тех, кто использует регулярное выражение ...
Вы можете сделать это с помощью комбинации unique
и accumarray
:
%# find unique rows and their corresponding indices in A
[uniqueRows,~,rowIdx]=unique(A(:,1:2),'rows');
%# for each group of unique rows, sum the values of the third column of A
subtotal = accumarray(rowIdx,A(:,3),[],@sum);
B = [uniqueRows,subtotal];
Вы можете использовать unique
, чтобы получить все группы, затем splitapply
, чтобы суммировать их
[u, ~, iu] = unique( A(:,1:2), 'rows' ); % Get unique rows & their indices
sums = splitapply( @sum, A(:,3), iu ); % Sum all values according to unique indices
output = [u, sums]
% >> output =
% output =
% 26 7 124
% 26 8 785
% 27 7 800
. Это поздний ответ, потому что дублированный вопрос просто спросили, поэтому я разместил здесь вместо этого. Обратите внимание, что splitapply
был введен в R2015b, так что не было, когда было отправлено решение accumarray
.