более простой способ - разбить строку на поля, используя разделители. Так как у вас есть труба "|" в качестве разделителей, а затем использовать его. Нет необходимости в сложном регулярном выражении. Кроме того, что если в следующий раз у вас будет больше полей?
Вот пример с awk (вы также можете использовать опцию -F для Perl)
$ awk -F"|" '{print "ID:"$1" Name:"$2" Date:"$3" filename:"$4}' file
ID:r100000 Name:Tom Sawyer Date:2010-12-01 filename:view.txt
Perl эквивалент
$ perl -F"\|" -ane 'print "ID:$F[1] Name: $F[2] Date:$F[3] filename:$F[4]"' file
ID:Tom Sawyer Name: 2010-12-01 Date:view.txt