There are a few things I notice here.
1) I have edited your patterns so they should capture what you're looking for.
2) It seems like you don't have any indexing on 'tokens' in your while loop. This is not necessarily a problem except when you have more than one set of values able to be returned for a single tline. You should index the different possible token results.
3) It seems like you just want the numbers from the different lines, not the text themselves. To do this just use 'tokens' instead of 'match' in your regexp command. Also, be sure to change your tokens variable name to something else to prevent any naming errors.
4) What is the purpose of pattern3? You don't keep any of the results for later use, so why bother finding it?
pattern1 = 'ERR kernel:\s.\s*(\d+.\d+).';
pattern2 = 'sof-audio-pci (\d+.\d+.\d\w.\d)';
pattern4 = 'header (\d\w\d)';