正则表达式有两个可选组,但不仅仅是第一组

时间:2018-04-23 15:43:43

标签: python regex python-3.x

我想要一个正则表达式,它将捕获带有两个可选前缀的单词,但不是单独的第一个单词。我正在使用Python 3.6。 它应该捕获

cat
nicecat
bigcat

以及这两者之前的任何前缀,例如

supernicecat
fatbigcat

但它不应该捕获

fatcat
supercat
xyzcat

这是我到目前为止所拥有的。这不太合适。

\b(\w+)?(?:big|nice)?cat\b

3 个答案:

答案 0 :(得分:1)

将他们包裹在另一组中:

\b(?:(\w+)?(?:big|nice))?cat\b

Live demo

答案 1 :(得分:1)

你可以做这样的事情

\b(?:\w*?(?:big|nice))?cat\b

将\ w *放入可选组。

答案 2 :(得分:1)

你走了:

^(?:[a-z]*(?:big|nice))?cat$

请务必启用多行标记。我假设每个条目都在自己的行上。

您的正则表达式的问题在于,由于问号,您使big|nice 或没有。我建议的是在它之前添加[a-z]*,然后在(?:[a-z]*(?:big|nice))表达式上添加问号,以便允许独立的cat匹配。