Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 提取文本文件中的匹配字符串_Regex_Matlab - Fatal编程技术网

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循环内进行相同的更改