I have a near perfect match - it's just that for the phone numbers I have a 1.03% null whereas the solution has 0.98% null so I am not sure what I have missed here... I think my approach is still valid and if you happen to miss the info it will still be in the address line.
So I noticed that every entry once you filtered out the Nulls was two new lines, as I was able to identify where the Company names were, but then I had to result to parsing as I coudn't really get much beyond the company name with the line breaks. If anyone knows how to order and then find a way to go from there, it would have been interesting to see what I could have done with the company groupings.
Anyway, since I had the two competing methods, my solution is extremely long.
Definitely went down the rabbit hole in my first attempt, mainly in trying to establish boundaries between records. I ran into too many exceptions that I wisely abandoned that idea. Then I figured out there was one row type that I could pattern match with Regular Expressions and easily handle all variations.