使用matlab正则表达式提取数据

时间:2016-10-29 14:55:07

标签: regex matlab

我要提取这些句子的数据:

<rupture dip="30.0" id="trt=00~ses=0173~src=1~rup=2-01" magnitude="5.25" rake="60.0" strike="322.0" tectonicRegion="Active Shallow Crust">
<rupture dip="60.0" id="trt=00~ses=0532~src=1~rup=1-01" magnitude="4.75" rake="60.0" strike="322.0" tectonicRegion="Active Shallow Crust">

我需要的数据是倾角,幅度,耙和罢工。 我试过regexp,但无法正确构建它。

k =1;
for i = 1:length(textf)
    if  strcmp(char(textf(i,2:12)),'ruptuer dip')==1 
        x = regexp(textf(i,:), '.*?(\d \w (\.\d+)*)', 'tokens' );
        dip(k,1) = str2double(char(x{1}));
        mag(k,2) = str2double(char(x{2}));
        rake(k,3) = str2double(char(x{3}));
        strike(k,4) = str2double(char(x{4}));
        k=k+1;
    end
end

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

这样做需要2个以上的捕获组。确切地说,您需要4次捕获,如下所示(mandatory regex101 link):

<rupture dip="(\d+(?:\.\d+)?)" id="[^"]*" magnitude="(\d+(?:\.\d+)?)" rake="(\d+(?:\.\d+)?)" strike="(\d+(?:\.\d+)?)" tectonicRegion="[^"]*">

在每个捕获组中,\d+(?:\.\d+)?匹配一个数字,该数字可以是整数或带小数点的数字。在属性idtectonicRegion中,[^"]*匹配双引号之间的任何内容(如果id和/或{{1,您可以使用加号替换星号可能不是空的。)

相关问题