Regex 提取文本文件中的匹配字符串
我有一个数据文件看起来像Regex 提取文本文件中的匹配字符串,regex,matlab,Regex,Matlab,我有一个数据文件看起来像 *************************** *************************** *************************** (header part) * 2004 11 8 0 0 0.00000000 P 1 1000.4545 211.1214 54.5545 P 3 5400.5454 1005.4545 -452.4899 P 4 ........ ......... ....
***************************
***************************
*************************** (header part)
* 2004 11 8 0 0 0.00000000
P 1 1000.4545 211.1214 54.5545
P 3 5400.5454 1005.4545 -452.4899
P 4 ........ ......... .......
P 5 ........ ......... ........
.
.
* 2004 11 8 0 15 0.00000000
P 1 1085.4545 200.1214 54.5545
P 3 5405.5454 1105.4545 -452.4899
P 4 ........ ......... .......
P 5 ........ ......... .......
文本文件中有几个“p1”、“p3”等。我需要定义所有“P[0-9]”的数字行,如
P_1=[1000.4545 211.1214 54.5545;1085.4545 200.1214 54.5545];
p_3=[5400.5454 1005.4545 -452.4899;5405.5454 1105.4545 -452.4899];
哪些代码给了我这种灵活性?将正则表达式与
regexp
一起使用。
如果您的数据在data.txt文件中
txt = fileread('data.txt')
parts = regexp(txt,'P\s*1\s*(\S*)\s*(\S*)\s*(\S*)','tokens')
P_1 = [reshape(str2double([parts{:}]),3,[])]'
如果要在循环中为所有9个p执行此操作,我建议使用单元格数组,而不是p_1
p_2
等。您可以在循环中非常简单地为regexp
构建表达式:
for i = 1:9
exp = ['P\s*', num2str(i), '\s*(\S*)\s*(\S*)\s*(\S*)'];
parts = regexp(txt,exp,'tokens')
P{i} = [reshape(str2double([parts{:}]),3,[])]';
end
这些代码没有给出正确的结果。有什么方法我可以发送或附加原始数据文件吗?没有,我不会为你做你的工作。你得到了什么?你期望得到什么?你试过阅读我使用的函数吗?代码的第一部分给出了P_1=[1000.4545 54.5545 200.1214;211.1214 1085.4545 54.5545],但它应该是这样的;P_1=[1000.4545211.121454 54.5545;1085.4545200.121454 54.5545];您能解释一下造成这种差异的原因吗?请尝试使用
P_1=[Reformate(str2double([parts{:}]),3,[])”
。在for循环内进行相同的更改