gpt4 book ai didi

regex - Matlab 正则表达式与标记的不一致行为

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:59 25 4
gpt4 key购买 nike

我有一组字符串(总共几千个),我需要解析它们,如下所示:

'22-213-1-0,0'
'4-23-1-1,0'
'85-572A-1-1,0'
'3-13-1-1,0'
'6-58A-1-1,0'

我想要分别返回第一个数字(不是数字!)、第二个数字和字母(如果存在的话):

'22' '213' ''
'4' '23' ''
'85' '572' 'A'
'3' '13' ''
'6' '58' 'A'

我使用正则表达式来做到这一点:

input = {'22-213-1-0,0' '4-23-1-1,0' '85-572A-1-1,0' '3-13-1-1,0' '6-58A-1-1,0'}'

test='(\d*)+[-]+(\d*)+(\w)+[-]\w*';

for i=1:length(input)

parsedstring=regexp(input(i),test,'tokens');
output(i,1)=cellfun(@str2num,parsedstring{1}{1}(1));
output(i,2)=cellfun(@str2num,parsedstring{1}{1}(2));
letter(i)=parsedstring{1}{1}(3);
end

但结果似乎不一致:输出=

22    21
4 2
85 572
3 1
6 58

字母 =

'3'    '3'    'A'    '3'    'A'

为什么正则表达式有时只返回第二个数字的第一个数字?我认为当第一个数字只有一位数字时可能会发生这种情况,但最后一个字符串证明有时它会正确解析一位数字。我错过了什么?

最佳答案

这里的关键是指定zero or one \w? 而不仅仅是 \w 的单词字符。正如我在评论中所说,这意味着您可以将 test 更新为,

test='(\d*)-(\d*)(\w?)-.*';

关于regex - Matlab 正则表达式与标记的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327603/

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