How can I improve my regular expressions?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Munho Noh
el 30 de Oct. de 2023
Comentada: Munho Noh
el 30 de Oct. de 2023
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 comentarios
Respuesta aceptada
Stephen23
el 30 de Oct. de 2023
Editada: Stephen23
el 30 de Oct. de 2023
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}
Más respuestas (0)
Ver también
Categorías
Más información sobre Variables en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!