I think this is best illustrated with an example.
I have the RE pattern choco_icecream = "(do|does) \w (loves|love|likes|like) (choco|chocolate) (ice-cream|icecream|ice cream)".
I want to check if example = "Does Jessica like Chocolate Icecream".lower() is a match for choco_icecream.
The example is a match of choco_icecream, but I want to know which word of example corresponds to an element of choco_icecream.
I would like in a dictionary. The ideal output will look like this: {"(do|does)":"does", "\w ":"jessica", "(loves|love|likes|like)":"like", "(choco|chocolate)":"chocolate", "(ice-cream|icecream|ice cream)":"icecream"}
How could I achieve this?
CodePudding user response:
I think this would all have been clear if you had just played around with this a bit, along with the documentation.
import re
choco_icecream = "(do|does) (\w ) (loves|love|likes|like) (choco|chocolate) (ice-cream|icecream|ice cream)"
example = "Does Jessica like Chocolate Icecream".lower()
x = re.match(choco_icecream, example)
print(x)
print(x.groups())
Output:
<re.Match object; span=(0, 36), match='does jessica like chocolate icecream'>
('does', 'jessica', 'like', 'chocolate', 'icecream')
Printing the whole match object gives you the entire match, but every set of parentheses you have in your expression creates a new "group", and the groups are all returned individually.
Note that I modified your regex to make the name a group as well.
