re = /From:\s*(?<name>[^<]*)(?:<(?<email>[^><]+)>)?(?:\nDate:\s*(?<date>.+))?(?:\nSubject:\s*(?<subject>.+))?/m
str = 'Regards
Ankit Balyan
---------- Forwarded message ---------
From: John Doe <john.doe@gmail.com>
Date: Thu, Aug 23, 2018 at 04:00 PM
Subject: my Email Subject
To: Ankit Balyan <sf.ankit@gmail.com>
Hi,
This is for testing purpose
'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html