I have some troubles with a RegEx which don't do what I expect. Can someone tell me where I'm wrong ?
Goal: Get the first words (if exists) finishing with "'s " (with a space at the end)
RegEx :
".*'s "
Test string and the expected result :
Amarok's Golovin's Road => Amarok's
Arkouna Dream's Elowin Engel's => Arkouna Dream's
Arkouna Dream's Elowin Engel's => Arkouna Dream's (in this case, I added a space after Engel's)
Liubov's Niagara => Liubov's
Urane Of Watson Lake => nothing
Problem: When I have 2 occurences of "'s ", it returns a wrong result.
CodePudding user response:
You can use
^[A-Z][a-zA-Z]*(?:\s [a-zA-Z] )*'s(?!\S)
^\p{Lu}\p{L}*(?:\s \p{L} )*'s(?!\S)
See the regex demo. Details:
^
- start of string\p{Lu}
- an uppercase letter\p{L}*
- zero or more letters(?:\s \p{L} )*
- zero or more repetitions of one or more whitespace chars followed with one or more letters's
- an's
substring(?!\S)
- a right-hand whitespace boundary.