How can I improve my regular expressions?
2 次查看(过去 30 天)
显示 更早的评论
Here are two txt files(frt_susp_sub.txt and rr_susp_sub.txt) and I'd like to extract spring and damper name from each file as shown in the picture below.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1524576/image.jpeg)
This is my code
clc
clear all
str1 = fileread('frt_susp_sub.txt');
frt_spr_assy_xpr = '(?<=SPRING_ASSEMBLY.+?springs.tbl/).+?(?=.spr)';
frt_dpr_assy_xpr = '(?<=DAMPER_ASSEMBLY.+?dampers.tbl/).+?(?=.dpr)';
frt_spr_assy = regexp(str1, frt_spr_assy_xpr, 'match', 'once');
frt_dpr_assy = regexp(str1, frt_dpr_assy_xpr, 'match', 'once');
str2 = fileread('rr_susp_sub.txt');
rr_spr_assy_xpr = '(?<=SPRING_ASSEMBLY.+?springs.tbl/).+?(?=.spr)';
rr_dpr_assy_xpr = '(?<=DAMPER_ASSEMBLY.+?dampers.tbl/).+?(?=.dpr)';
rr_spr_assy = regexp(str2, rr_spr_assy_xpr, 'match', 'once');
rr_dpr_assy = regexp(str2, rr_dpr_assy_xpr, 'match', 'once');
It works well as I expected but the performance is pretty bad.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1524581/image.jpeg)
How can I improve my code?
0 个评论
采纳的回答
Stephen23
2023-10-30
编辑:Stephen23
2023-10-30
Get rid of the look-behind expressions. They don't restrict which block of data is being read anyway.
Also note that '.' matches any character, whereas '\.' matches a period character only.
Also get rid of cargo-cult CLC and CLEAR ALL.
str1 = fileread('frt_susp_sub.txt');
frt_spr_assy = regexp(str1, '\w+(?=\.spr)', 'match', 'once')
frt_dpr_assy = regexp(str1, '\w+(?=\.dpr)', 'match', 'once')
It may be faster to avoid the look-ahead:
tmp = regexp(str1, '(\w+)\.spr', 'tokens', 'once');
frt_spr_assy = tmp{1}
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!