I have the following string:
string = "Malcolm Reynolds"
I wrote a regex for this which will find the first-name and last-name of user:
m = re.match(r"(?P<first_name>w+) (?P<last_name>w+)", "Malcolm Reynolds") m.groupdict()
Result:
{'first_name': 'Malcolm', 'last_name': 'Reynolds'}
Sometimes, I don’t get the last name. At that time, my regex fails. Can any one have any idea regarding this?
Advertisement
Answer
You may use
^(?:(?:M(?:(?:is|r)?s|r)|[JS]r).?s+)?(?P<first_name>w+)(?:s+(?P<last_name>w+))?$
See the regex demo
Regex details
- ^– start of string
- (?:(?:M(?:(?:is|r)?s|r)|[JS]r).?s+)?– an optional non-capturing group matching an optional char sequence:- Mr,- Ms,- Mrs,- Miss,- Jror- Srwith an optional- .after and 1+ whitespaces
- (?P<first_name>w+)– Group “first_name”: one or more word chars
- (?:s+(?P<last_name>w+))?– – an optional non-capturing group matching 1+ whitespaces and then capturing into Group “last_name” 1 or more word chars
- $– end of string.