RE Match each word with a part of the pattern
Question:
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?
Answers:
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.
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?
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.