in reply to Need soom regex expertise
Take two bites at the cherry. First extract the (possibly null) string between the first and last record and then extract the coordinates from that:
#! perl -slw use strict; local $/ = ''; ## paragraph mode while( <DATA> ) { print "\n'$_' contains"; if( my( $coords ) = m[MAX.*?\n(.*)\nREPEAT]s ) { my @coords = $coords =~ m[((?:\d+(?:NW|N|NE|E|SE|S|SW|W)[ .]+) +{4})]g; print "\t$_" for @coords; } else { print 'No coords'; } } __DATA__ MAX SUSTAINED WINDS 65 KT WITH GUSTS TO 80 KT. REPEAT...CENTER LOCATED NEAR 17.0N 77.5W AT 11/2100Z MAX SUSTAINED WINDS 65 KT WITH GUSTS TO 80 KT. 64 KT....... 25NE 0SE 0SW 25NW. REPEAT...CENTER LOCATED NEAR 17.0N 77.5W AT 11/2100Z MAX SUSTAINED WINDS 65 KT WITH GUSTS TO 80 KT. 64 KT....... 25NE 0SE 0SW 25NW. 50 KT....... 40NE 0SE 0SW 40NW. 34 KT.......100NE 75SE 0SW 75NW. 12 FT SEAS..175NE 100SE 50SW 175NW. REPEAT...CENTER LOCATED NEAR 17.0N 77.5W AT 11/2100Z
Produces:
P:\test>420431 'MAX SUSTAINED WINDS 65 KT WITH GUSTS TO 80 KT. REPEAT...CENTER LOCATED NEAR 17.0N 77.5W AT 11/2100Z ' contains No coords 'MAX SUSTAINED WINDS 65 KT WITH GUSTS TO 80 KT. 64 KT....... 25NE 0SE 0SW 25NW. REPEAT...CENTER LOCATED NEAR 17.0N 77.5W AT 11/2100Z ' contains 25NE 0SE 0SW 25NW. 'MAX SUSTAINED WINDS 65 KT WITH GUSTS TO 80 KT. 64 KT....... 25NE 0SE 0SW 25NW. 50 KT....... 40NE 0SE 0SW 40NW. 34 KT.......100NE 75SE 0SW 75NW. 12 FT SEAS..175NE 100SE 50SW 175NW. REPEAT...CENTER LOCATED NEAR 17.0N 77.5W AT 11/2100Z ' contains 25NE 0SE 0SW 25NW. 40NE 0SE 0SW 40NW. 100NE 75SE 0SW 75NW. 175NE 100SE 50SW 175NW.
|
|---|