为包含每个字符至少一次的字符串查找更简单的Python RegEx

use*_*749 1 python regex

我正在开发一个小项目,并且需要正则表达式,它接受包含给定字母表每个字符的字符串至少一次.

因此,对于字母表,{J, K, L}我需要一个RegEx,它接受包含J一次或多次AND和K一次或多次的字符串L,以及任何顺序的一次或多次,其中包含之前,之后或之间的任何数量的重复字符.

我对RegEx缺乏经验,所以很难找到许多问题的"横向思维"解决方案.因此,我的第一个方法就是相当暴力:我拿了每个可能的"基础"字符串,例如,

JKL, JLK, KJL, KLJ, LKJ, LJK

并允许任何可以从其中一个起点构建的字符串.然而,由此产生的正则表达式*(尽管有效)最终会很长并且包含大量冗余.更不用说一旦字母表中有多个字符,这种方法就变得完全站不住脚了.

我花了几个小时试图找到一个更优雅的方法,但我还没有找到一个仍然接受所有可能的字符串.是否有一种方法或技术可以用更优雅和可扩展的方式(更大的字母表)来完成这项工作?

*作为参考,我列出的例子的正则表达式:

((J|K|L)*J(J|K|L)*K(J|K|L)*L(J|K|L)*)|
((J|K|L)*J(J|K|L)*L(J|K|L)*K(J|K|L)*)|
((J|K|L)*K(J|K|L)*J(J|K|L)*L(J|K|L)*)|
((J|K|L)*K(J|K|L)*L(J|K|L)*J(J|K|L)*)|
((J|K|L)*L(J|K|L)*J(J|K|L)*K(J|K|L)*)|
((J|K|L)*L(J|K|L)*K(J|K|L)*J(J|K|L)*)
Run Code Online (Sandbox Code Playgroud)

Seb*_*ske 6

这是前瞻性的典型用例.您可以简单地^(?=[^J]*J)(?=[^K]*K)(?=[^L]*L)用来检查所有条件.如果您的字符串也必须只包含这些字符,您可以附加[JKL]+$到它.