2015-12-02 81 views
4

我试图审查一个肮脏的词。用户可以用*替换一些字符。正则表达式。是否可以匹配(a或b)和(a或c)和(a或d)而不是aaa?

让我们一个字 “狗”,例如(这是不脏的,当然)

  1. * OG
  2. d * G
  3. 做*
  4. XX的

正则表达式看起来像(d|\*)(o|\*)(g|\*)

是否可以匹配上面的所有变体但不是'***'?

+1

当你在技术上并不需要向前看,你的RE将成为,如果你不inconventiently大(' ([d *] [o *] g | [d *] o [g *] | d [o *] [g *]') – 2015-12-02 09:05:41

+1

你怎么知道狗不脏? *快速.... :-P –

回答

4

是,Python有负向前断言。你想匹配[d*][o*][g*](?!\*{3})

(?!\*{3})[d*][o*][g*] 
1
^(?!\**$)[dog*]+$ 

您可以使用lookahead来尝试类似的操作。请参阅演示。

https://regex101.com/r/hE4jH0/23

+0

有了这个,你还必须添加'(?!d * $)(?!o * $)...' - 这个正则表达式需要太多的例外。 –

0

您也可以使用这个表达式:

^\w{0,3}\*{0,2}\w{0,3}(?!\*) 
相关问题