Вам нужно использовать группу захвата, чтобы отказаться от смешивания OR (|
)
(\ba\b|\bthe\b|\bone\b) (\breason\b|reasons\b) (\bfor\b|\bof\b)
. И затем, как более элегантный способ, вы можете поместить границы слов вокруг групп. Также обратите внимание что, когда вы используете пространство в своем регулярном выражении вокруг слов, нет необходимости использовать границу слова. И для reasons
и reason
вы можете сделать последний s
опционным с ?
. И обратите внимание, что если вы не хотите, чтобы ваши слова соответствовали отдельным группам, вы можете сделать группы группами, не имеющими захвата, :?
.
\b(?:a|the|one) reasons? (?:for|of)\b
Или использовать группу захвата, если вы хотите, чтобы слова в группе:
\b(a|the|one) (reasons?) (for|of)\b
Да, просто сделайте это:
class Example(models.Model):
parent_example = models.ForeignKey('self')