user576838
user576838

Reputation: 875

Regex for Matching Apostrophe 's' words

I'm trying to create a regex to match a word that has or doesn't have an apostrophe 's' at the end. For the below example, I'd like add a regex to replace the apostrophe with the regex to match either an apostrophe 's' or just an 's'.

Philip K Dick's Electric Dreams
Philip K Dicks Electric Dreams

What I am trying so far is below, but I'm not getting it to match correctly. Any help here is great. Thanks!

Philip K Dick[\'[a-z]|[a-z]] Electric Dreams

Upvotes: 1

Views: 16689

Answers (2)

Yonatan Bitton
Yonatan Bitton

Reputation: 78

Just set the apostrophe as optional in the regex pattern.

Like this: [a-zA-Z]+\'?s,

For example, using your test strings:

import re

s1 = "Philip K Dick's Electric Dreams"
s2 = "Philip K Dicks Electric Dreams"

>>> re.findall("[a-zA-Z]+\'?s", s1)
["Dick's", 'Dreams']

>>> re.findall("[a-zA-Z]+\'?s", s2)
['Dicks', 'Dreams']

Upvotes: 3

Cory Kramer
Cory Kramer

Reputation: 117926

You can use the regex (\w+)'s to represent any letters followed by 's. Then you can substitute back that word followed by just s.

>>> s = "Philip K Dick's Electric Dreams"
>>> re.sub(r"(\w+)'s", r'\1s', s)
'Philip K Dicks Electric Dreams'

Upvotes: 2

Related Questions