Python “是贪婪的”;或;正则表达式中是否存在组?

Python “是贪婪的”;或;正则表达式中是否存在组?,python,regex,Python,Regex,我有一个自动生成的正则表达式,基本上是一个大的“或”组,如下所示: (\bthe\b|\bcat\b|\bin\b|\bhat\.\b|\bhat\b) 我注意到了,如果是 hat. 它将只匹配“帽子”,而不是我想要的“帽子”。有没有办法让它更贪婪 更新:忘记了单词边界,很抱歉。在正则表达式中将hat\.放在hat之前。交替中的第一个匹配表达式获胜帽子匹配帽子。因此帽子\。从不被选中 更好的方法是将该部分写成hat\?,而不是hat\。|hat。这使得句号是可选的,因此在替换中不需要两个术语

我有一个自动生成的正则表达式,基本上是一个大的“或”组,如下所示:

(\bthe\b|\bcat\b|\bin\b|\bhat\.\b|\bhat\b)
我注意到了,如果是

hat.
它将只匹配“帽子”,而不是我想要的“帽子”。有没有办法让它更贪婪


更新:忘记了单词边界,很抱歉。

在正则表达式中将
hat\.
放在
hat
之前。交替中的第一个匹配表达式获胜<代码>帽子匹配<代码>帽子。因此<代码>帽子\。从不被选中

更好的方法是将该部分写成
hat\?
,而不是
hat\。|hat
。这使得句号是可选的,因此在替换中不需要两个术语

编辑后:


和空格之间没有单词边界(两者都是非单词字符)。因此,
\bhat\.\b
只会在
hat.x
中匹配,在该句点后面紧跟着另一个字母。这意味着在一个句子中,
hat
将是匹配的。不过,我知道你找到了解决办法。

你的意思是除了改变物品的顺序之外?@TimCooper,很抱歉误导你,我忘了单词边界。基本上,我只想允许匹配几个特定的边界(在示例中为“.”)。将单词边界因素排除在paren之外。不要把它放在非单词字符旁边!!!!它不会做你认为它会做的事。如果您不了解
\b
的功能,最好不要使用它,您也不了解。然后按长度排序,最长优先。@tchrist,看起来像
(\bhat(?。|\b))
执行此操作,您的
(\bhat(?。|\b))中的点需要转义。但是不要费心去修理它@kindall的
hat\.?
可读性更高,可能也更高效。你在这一点上完全正确。我忘了单词边界,请回顾我的问题。这也是我的想法:
\b(帽子里的猫)