gpt4 book ai didi

regex - Matlab中的正则表达式只留下数组的指定项

转载 作者:行者123 更新时间:2023-12-04 10:56:03 29 4
gpt4 key购买 nike

我有一个 channel 列表:

channels = {'1LT1', '1LT2', '1LT3', '1LT4', '1LT5', '2LA1', '2LA2', '2LA3', '3LH1', '3LH5', '4LT1', '4LT2', '4LT3', '5LH1', '5LH2', '4LT10'}

我需要写一个算法来只留下远端 channel 。这意味着对于每种类型的 channel (“1LT”、“2LA”、“3LH”、“4LT”等),我只需要最后一个数字最高的 channel 。最好的方法是返回这些 channel 的索引。例如,对于上述列表,结果应该是:
[5, 8, 10, 15, 16]

我想我可以通过像这样拆分来使用正则表达式来做到这一点:
row_i = 1;
for ch_i=[1:length(channels)]
try
[n(row_i,:), ch_type(row_i,:)] = strsplit(channels{ch_i},'\d+[A-Z]', 'DelimiterType','RegularExpression');
row_i = row_i + 1;
catch
continue
end
end

但后来我真的被困住了。有人可以给我一些创建好的算法的提示吗?

我很感激任何想法!

最佳答案

您可以使用 regexp 要将每个字符串分成 channel 和数字,请使用 findgroups 为 channel 创建数字标签, 使用 str2double 将数字字符串转换为实际数字,然后 splitapply 找到每个组的最大值。这是代码,尽管我现在无法对其进行测试,因此可能需要进行一些调整:

tokens = regexp(channels, '(\d+[A-Z]+)(\d+)', 'tokens');
tokens = vertcat(tokens{:});
[grps, channelID] = findgroups(tokens(:, 1));
nums = str2double(tokens(:, 2));
channelMax = splitapply(@max, nums, grps);

使用 channelIDchannelMax值,然后您可以重建远端 channel 名称并使用 sprintf 在 channel 列表中找到它们的索引。 , strsplit , 和 ismember :
distal = strsplit(sprintf('%s%d\n', channelID, channelMax));
index = find(ismember(channels, distal));

关于regex - Matlab中的正则表达式只留下数组的指定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59182506/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com