我要提取这些句子的数据:
<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
任何人都可以帮助我。
答案 0 :(得分:0)
这样做需要2个以上的捕获组。确切地说,您需要4次捕获,如下所示(mandatory regex101 link):
<rupture dip="(\d+(?:\.\d+)?)" id="[^"]*" magnitude="(\d+(?:\.\d+)?)" rake="(\d+(?:\.\d+)?)" strike="(\d+(?:\.\d+)?)" tectonicRegion="[^"]*">
在每个捕获组中,\d+(?:\.\d+)?
匹配一个数字,该数字可以是整数或带小数点的数字。在属性id
和tectonicRegion
中,[^"]*
匹配双引号之间的任何内容(如果id
和/或{{1,您可以使用加号替换星号可能不是空的。)