#!/usr/bin/perl use warnings; use strict; while() { chomp; # original regex #if( /[A-Za-z]+\s*=\s*(\S*)\s*[A-Za-z]+\s*=\s*(\S*)\s*[A-Za-z]+\s*=\s*(\S*)\s*[A-Za-z]+\s*=\s*(\S*)/i ) { # Now trying to allow spaces in the fields without gobbling the field names (which never have spaces) # This is getting cumbersome quickly. if( /^[A-Za-z]+\s*=\s*(.+?)(?=\s*[A-Za-z]+\s*=)\s*[A-Za-z]+\s*=\s*(.+?)(?=\s*[A-Za-z]+\s*=)\s*[A-Za-z]+\s*=\s*(.+?)(?=\s*[A-Za-z]+\s*=)\s*[A-Za-z]+\s*=\s*(.+?)\s*$/ ) { print "$1,$2,$3,$4\n"; } else { print ",,,,not recognized: $_\n"; } } __DATA__ FIELDA = ONEAL FIELDB = RELAY FIELDC = L1208 FIELDD = ALTS FIELDA = OSSIPEE FIELDB = DISC FIELDC = SOH: 169879251 FIELDD = DISC FIELDA = OSSIPEE FIELDB = RELAY FIELDC = L1201 FIELDD = ALTS FIELDA = OSSIPEE FIELDB = RELAY FIELDC = L1203 FIELDD = ALTS #### ONEAL,RELAY,L1208,ALTS OSSIPEE,DISC,SOH: 169879251,DISC OSSIPEE,RELAY,L1201,ALTS OSSIPEE,RELAY,L1203,ALTS