vincentsuen 发表于 2009-1-17 13:49

如何提取一个字符串中间的数字部分?

比如一系列字符串:'H100L200'、'H200L300',我想把H之后和L之后的数字提取出来分别存储成两个数值变量,该如何操作?

ch_j1985 发表于 2009-1-17 14:35

回复 楼主 vincentsuen 的帖子

看看这几个帖子
http://forum.vibunion.com/forum/viewthread.php?tid=34272&highlight=%CA%FD%D7%D6
http://forum.vibunion.com/forum/viewthread.php?tid=8937&highlight=%CA%FD%D7%D6
http://forum.vibunion.com/forum/thread-45622-1-1.html

friendchj 发表于 2009-1-17 15:15

help regexp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clear
clc
str1='H100L200';
a1=regexp(str1,'');
% num1=str1(a1); 提取离散数字
aa1=diff(a1);
num1=[];
num=zeros(1,length(a1));
j=1;
for i=1:length(aa1)
    if aa1(i)==1
      num1=;
    else
      num1=;
      num(j)=str2num(num1);
      j=j+1;
      num1=[];
    end
    if (i==length(aa1)) && (aa1(end)==1)
       num1=;
       num(j)=str2num(num1);
    end
end
clear num1
disp(num)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100   200   0   0   0   0

vincentsuen 发表于 2009-1-17 16:12

原帖由 friendchj 于 2009-1-17 15:15 发表 http://www.chinavib.com/forum/images/common/back.gif
help regexp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clear
clc
str1='H100L200';
a1=regexp(str1,'');
% num1=str1(a1); 提取离散数字
aa1=diff(a1);
num1=[];
num=zeros(1,length(a1));
j=1;
...

感谢friend兄的热心肠,你的方法是可行的。不过我又找到了处理字符和数字同行的更简便的方法,全靠大家都启发。

clear;
clc;

filename='H100L200.txt';
= fileparts(filename);

locl=findstr(name,'L');%字符L在字符串中的位置
longh=locl-2;%H数据长度
longl=length(name)-locl;%L数据长度
strh=name(2:locl-1);%取出H的字符
strl=name(locl+1:length(name));%取出L的字符
hh=str2num(strh);
ll=str2num(strl);

ChaChing 发表于 2009-1-17 16:44

回复 楼主 vincentsuen 的帖子

3楼的比较一般化! 试试下面, 可能较易懂!
str1='H100L200';
hh=findstr(str1,'H'); ll=findstr(str1,'L');
No1=str2num(str1(hh+1:ll-1)); No2=str2num(str1(ll+1:end));


非常抱歉!! 个人习惯进入论坛即查新帖, 连开好几十帖再一一看!
时常就解决了还不知! 帮看看是否需删!

[ 本帖最后由 ChaChing 于 2009-1-17 16:51 编辑 ]

vincentsuen 发表于 2009-1-18 15:20

原帖由 ChaChing 于 2009-1-17 16:44 发表 http://www.chinavib.com/forum/images/common/back.gif
3楼的比较一般化! 试试下面, 可能较易懂!
str1='H100L200';
hh=findstr(str1,'H'); ll=findstr(str1,'L');
No1=str2num(str1(hh+1:ll-1)); No2=str2num(str1(ll+1:end));


非常抱歉!! 个人习惯进入论 ...

代码更精简!赞一个!

sogooda 发表于 2009-1-18 21:22


clear;clc
str1='A3B56C58$@41NF';         %str2='H100L200';
R=regexp(str1,'\d{1,}','match');
for i=1:length(R)
    eval(sprintf('No(%d)=str2num(R{%d});',i,i));
end
No


No =
   3    56    58    41
页: [1]
查看完整版本: 如何提取一个字符串中间的数字部分?