【发布时间】:2018-09-29 15:23:22
【问题描述】:
我正在做一个正则表达式课程的练习题:
您将如何编写一个匹配第一个单词是 Alice、Bob 或 Carol 的句子的正则表达式?第二个词要么是吃,要么是宠物,要么是扔;第三个词是苹果、猫或棒球;句子以句号结尾?此正则表达式应该不区分大小写。它必须符合以下条件:
- 爱丽丝吃苹果。
- 鲍勃宠物猫。
- Carol 扔棒球。
- 爱丽丝扔苹果。
- 鲍勃吃猫。
我的代码如下:
regex=re.compile(r'Alice|Bob|Carol\seats|pets|throws\sapples\.|cats\.|baseballs\.',re.IGNORECASE)
mo=regex.search(str)
ma=mo.group()
当我通过str ='BOB EATS CATS.' 或'Alice throws Apples.' 时,mo.group() 分别只返回'Bob' 或'Alice',但我期待它返回整个句子。
当我通过str='Carol throws baseballs.' 时,mo.group() 返回'baseballs.',这是最后一个匹配项。
我不知道为什么:
对于我传递的前两个 str 示例,它返回了第一个匹配项(
'Bob'或'Alice'),而我传递的第三个 str 示例返回了最后一个匹配项('baseball')?在所有 3 个 str 示例中,我不确定为什么
mo.group()没有将整个句子作为匹配项返回。即我期待'Carol throws baseballs.'作为mo.group()的输出
【问题讨论】:
-
因为你没有对管道进行分组
-
感谢您的评论,为什么我们需要在 () 中对管道进行分组?我认为只有在我们正在寻找组时才使用括号分组;我正在寻找匹配整个表达式....也没有解释为什么“棒球”。在该示例中返回。
-
因为您将句号作为选项的一部分。
标签: python regex python-3.x regex-group