The problem you have given yourself is tricky because the only way to know whether a date is outward or return is to do with its placement in the string of data (they are both dates in exactly the same format).
Looking at your example data, it seems that from the word "Itinerary" onwards the positions of each bit of data will always be the same. So, outward date will be 8th on from "Itinerary" and return date will 16th on (if I've counted right).
But at least that is a bit of logic that you should be able to leverage.
As @ccstone says:
Okay, here is an approach that might get you started (there will be other methods but here's how I would go about it). The idea is to first clean up the data so that each item is simply separated by single commas (rather than multiple line breaks and tabs as it is now). This can be done using Keyboard Maestro's built in Search and Replace Action (or by Regex).
Basically just look for tabs and replace with line breaks. Then look for multiple line breaks and replace with single line breaks. Then replace all line breaks with commas.
So:
Becomes this:
Now, if that it saved as a Variable, it is in a format that Keyboard Maestro can easily work with (each actual bit of data separated by a comma).
Say this cleaned up Variable is called: %Variable%Clipboard text% then the first piece of data in that Variable can be accessed and displayed with the text syntax %Variable%Clipboard text[1]% (johndoe@gmail.com) and the eighth bit of data can be accessed and displayed with %Variable%Clipboard text[8]% (John).
This relatively simple extraction will fall over when you get beyond the passenger names because the position number of items after that will vary depending on how many passengers there are.
However, you are still in a better position than before because at least now you can apply some logic to numbered bits in the Variable to find out what they are and extract them.
The outward date will be the 8th bit of data after the bit that contains the word "Itenerary". The return date will be the 16th bit of data after the bit that contains the word "Itenerary"
It might be there is a similar approach using Regex alone (others here maybe can suggest one). But the key to understanding why your original approach couldn't distinguish between outward and return dates is that it didn't take account of where those dates were positioned in the text string in relation to other bits of data in the text string.
Here is an example of how I would do this with native Keyboard Maestro actions. I'm sure there are better ways with Regex etc - but this gives an example of applying the logic. To make the process more robust you could also check that the two pieces of data are actual dates rather than something else.
EXAMPLE Find Outward and Return Date by Position after "Itinerary".kmmacros (7.1 KB)
Click to show image of Example Macro