You might capture the optional source together with the date in a first pass, and then, inside an compound existence test, s/// such source data as does exist to $data1 while using the else clause to insert "No source indicated" or whatever as the new value for data1.
Inelegant, and maybe not efficient, but sometimes 2 regexen are better than one.