How to extract the correct data with regexp?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello again! This is a continuation of a previous question.
I'm using this expression to extract data from a cell of strings:
tokens = regexp(DATALow, '\<(R\d{2}[A-Z]?)/.*?(\d{4})[A-Z]*(?:(?:\d{4})[A-Z])?\>', 'tokens');
It's working quite well but I'm getting some unwanted extra data from my strings. The problematic strings look like this:
'METAR ESGJ 072350Z 16003KT 1500 BR VV002 M03/M03 Q1009 R19/790042'
and
'METAR ESSA 181550Z 13007KT 1100 R01L/P1500N R19R/1400N R01R/1400N R19L/P1500N SN VV007 M01/M01 Q1013 R01L/590249 R08/590247 R01R/12//70 BECMG 9999 NSW BKN012'
I would like to change my regexp to not extract the '0042' from the first string and '9999' from the second. How do I modify the expression without losing the wanted data?
The data I would like to collect is '1500' from the Group 'R01L/P1500N' and '1400' from 'R19R/1400N' and so on in the second string.
This is a sample of DATALow:
'METAR ESOE 180920Z 08006KT 1400 R01/1200VP2000N R19/1700N -SN BKN004 M00/M01 Q1013'
'METAR ESOK 180450Z AUTO 07006KT 1200 R03/P1500N R21/P1500N -SN FEW006/// SCT008/// M02/M03 Q1014'
'METAR ESOK 180520Z AUTO 07006KT 1400 R03/P1500N R21/P1500N -SN FEW006/// M02/M03 Q1014'
'METAR ESOW 180550Z 09005KT 1200 R01/P1500D R19/P1500N SN VV010 M01/M02 Q1016 R01/0///95'
'METAR ESOW 180650Z 09005KT 0800 R01/1300D R19/P1500D SN VV005 M01/M02 Q1016 R01/490232'
'METAR ESOW 180720Z 09005KT 1200 R01/P1500U R19/P1500U SN VV010 M01/M02 Q1016 R01/490232'
'METAR ESOW 181020Z 11006KT 1100 R01/1300N R19/1300N -SN VV010 M01/M01 Q1014 R01/490232'
'METAR ESOW 181050Z 11007KT 1100 R01/1300U R19/1200U -SN VV010 M01/M01 Q1014 R01/490232'
'METAR ESOW 181120Z 11006KT 1100 R01/1200D R19/1200D SN VV010 M01/M01 Q1014 R01/490232'
'METAR ESOW 181150Z 10007KT 1000 R01/1100N R19/1100N SN VV005 M01/M01 Q1013 R01/490232'
'METAR ESOW 181220Z 11007KT 1100 R01/P1500N R19/P1500N -SN VV008 M01/M01 Q1013 R19/690138'
'METAR ESOW 181250Z 11009KT 1200 R01/1300U R19/1300N SN VV009 M01/M01 Q1013 R19/690138'
'METAR ESSA 181320Z 15010KT 1500 -SN VV010 M00/M02 Q1013 R01L/12//66 R08/12//74 R01R/12//70 BECMG 2500 SN BKN014'
'METAR ESSA 181350Z 14008KT 1500 R01L/P1500N R19R/P1500N R01R/1500N R19L/P1500N SN VV013 M01/M01 Q1013 R01L/12//66 R08/12//74 R01R/12//70 TEMPO 4000 VV015'
'METAR ESSA 181350Z 14008KT 1500 R01L/P1500N R19R/P1500N R01R/1500N R19L/P1500N -SN VV013 M01/M01 Q1013 R01L/12//66 R08/12//74 R01R/12//70 TEMPO 4000 VV015'
'METAR ESSA 181420Z 14008KT 1000 R01L/1400N R19R/1300N R01R/1200D R19L/1400D SN VV007 M01/M01 Q1013 R01L/550157 R08/520155 R01R/12//70 TEMPO 2000 VV010'
'METAR ESSA 181450Z 14008KT 0800 R01L/1200N R19R/1100N R01R/1100N R19L/1400N SN VV006 M01/M01 Q1013 R01L/550147 R08/550255 R01R/12//70 TEMPO 2000 VV010'
'METAR ESSA 181450Z 14008KT 0800 R01L/1200N R19R/1100N R01R/1100N R19L/1400N SN VV006 M01/M01 Q1013 R01L/550147 R08/550256 R01R/12//70 TEMPO VV010'
'METAR ESSA 181450Z 14008KT 0800 R01L/1200N R19R/1100N R01R/1100N R19L/1400N SN VV006 M01/M01 Q1013 R01L/550157 R08/520155 R01R/12//70 TEMPO 2000 VV010'
Thank you for your help!
0 commentaires
Réponses (1)
VBBV
le 3 Mar 2023
Use match option in place of 'tokens' in the line tokens = regexp(DATALow, '\<(R\d{2}[A-Z]?)/.*?(\d{4})[A-Z]*(?:(?:\d{4})[A-Z])?\>','match') % try using match
DATALow = {'METAR ESOE 180920Z 08006KT 1400 R01/1200VP2000N R19/1700N -SN BKN004 M00/M01 Q1013'
'METAR ESOK 180450Z AUTO 07006KT 1200 R03/P1500N R21/P1500N -SN FEW006/// SCT008/// M02/M03 Q1014'
'METAR ESOK 180520Z AUTO 07006KT 1400 R03/P1500N R21/P1500N -SN FEW006/// M02/M03 Q1014'
'METAR ESOW 180550Z 09005KT 1200 R01/P1500D R19/P1500N SN VV010 M01/M02 Q1016 R01/0///95'
'METAR ESOW 180650Z 09005KT 0800 R01/1300D R19/P1500D SN VV005 M01/M02 Q1016 R01/490232'
'METAR ESOW 180720Z 09005KT 1200 R01/P1500U R19/P1500U SN VV010 M01/M02 Q1016 R01/490232'
'METAR ESOW 181020Z 11006KT 1100 R01/1300N R19/1300N -SN VV010 M01/M01 Q1014 R01/490232'
'METAR ESOW 181050Z 11007KT 1100 R01/1300U R19/1200U -SN VV010 M01/M01 Q1014 R01/490232'
'METAR ESOW 181120Z 11006KT 1100 R01/1200D R19/1200D SN VV010 M01/M01 Q1014 R01/490232'
'METAR ESOW 181150Z 10007KT 1000 R01/1100N R19/1100N SN VV005 M01/M01 Q1013 R01/490232'
'METAR ESOW 181220Z 11007KT 1100 R01/P1500N R19/P1500N -SN VV008 M01/M01 Q1013 R19/690138'
'METAR ESOW 181250Z 11009KT 1200 R01/1300U R19/1300N SN VV009 M01/M01 Q1013 R19/690138'
'METAR ESSA 181320Z 15010KT 1500 -SN VV010 M00/M02 Q1013 R01L/12//66 R08/12//74 R01R/12//70 BECMG 2500 SN BKN014'
'METAR ESSA 181350Z 14008KT 1500 R01L/P1500N R19R/P1500N R01R/1500N R19L/P1500N SN VV013 M01/M01 Q1013 R01L/12//66 R08/12//74 R01R/12//70 TEMPO 4000 VV015'
'METAR ESSA 181350Z 14008KT 1500 R01L/P1500N R19R/P1500N R01R/1500N R19L/P1500N -SN VV013 M01/M01 Q1013 R01L/12//66 R08/12//74 R01R/12//70 TEMPO 4000 VV015'
'METAR ESSA 181420Z 14008KT 1000 R01L/1400N R19R/1300N R01R/1200D R19L/1400D SN VV007 M01/M01 Q1013 R01L/550157 R08/520155 R01R/12//70 TEMPO 2000 VV010'
'METAR ESSA 181450Z 14008KT 0800 R01L/1200N R19R/1100N R01R/1100N R19L/1400N SN VV006 M01/M01 Q1013 R01L/550147 R08/550255 R01R/12//70 TEMPO 2000 VV010'
'METAR ESSA 181450Z 14008KT 0800 R01L/1200N R19R/1100N R01R/1100N R19L/1400N SN VV006 M01/M01 Q1013 R01L/550147 R08/550256 R01R/12//70 TEMPO VV010'
'METAR ESSA 181450Z 14008KT 0800 R01L/1200N R19R/1100N R01R/1100N R19L/1400N SN VV006 M01/M01 Q1013 R01L/550157 R08/520155 R01R/12//70 TEMPO 2000 VV010'}
tokens = regexp(DATALow, '\<(R\d{2}[A-Z]?)/.*?(\d{4})[A-Z]*(?:(?:\d{4})[A-Z])?\>','match') % try using match
tokens{:}
0 commentaires
Voir également
Catégories
En savoir plus sur Characters and Strings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!