Home > Back-end >  Extracting optional quantity of words
Extracting optional quantity of words

Time:12-24

I have a string like this-

string="John has got 6 cats but I think my friend Susan has 3 dogs and Mike has 8 fishes"

I want to write regex to extract pattern Name verb after it and #of pets and what kind of pets it is.

re.findall('[A-Za-z]  \w  \d  \w ', string)

works with Susan has 3 dogs, Mike has 8 fishes.

But it doesn't work with John has got 6 cats

how can I edit code to make it look for one or two words after name?

Thank you in advance!

CodePudding user response:

You might use non-capturing group (?:...) and {1,2} to denote 1 to 2 repetition as follows

import re
string="John has got 6 cats but I think my friend Susan has 3 dogs and Mike has 8 fishes"
found=re.findall(r'[A-Z][a-z]  (?:\w  ){1,2}\d  \w ', string)
print(found)

output

['John has got 6 cats', 'Susan has 3 dogs', 'Mike has 8 fishes']
  • Related