2015-12-02 78 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}(?!\*) 
相關問題