It would be nice if the regular expression could be made less specific, but some features of your data format make that tricky (e.g. the fact that the value following "=>" can be a zero-length string).
However, I think it's pretty much guaranteed that there will be whitespace between the key/value pairs. Yet, you use /\s*
/. Also, nowhere
do I see specified that there even may be whitespace around the "=>
" — you just made that up. As this file looks to be computer generated, I sincerely doubt that this will ever be the case. Finally: the only place do I see whitespace inside
a column value, is in the final column of the line: the timestamp.
In short: I think this regex will do:
And if you do this:
my %r =
/^ (Collection)=>(\S*) \s+
you even get a nice hash record out of it, even though it is restricted to one match per line (otherwise, when using /g
you'd get list context, with a different behavior as a result.