I think your best bet is a gazetteer approach. If you go to this link, you will find plenty of datasets containing lists of existing first names. This should help you detect a big majority of first names using regular expressions.
Now, there are some preprocessing steps you could take:
remove any digits, punctuation, etc.
if you have upper cases, you could ...
The compound split is not trivial, but there are solutions that kind of work (as you can read on the link @Aditya shared).
Another way of dealing with the matter would be to tokenize the strings into character n-grams.