2013-11-26 124 views
0

基本上我不會正則表達式,只能接受這樣的:正則表達式,其中一個詞首字母大寫,字由_包圍

Dog 
Cat_Dog 
Cat_Dog_Mouse 

數字是允許的。 [0-9]與被視爲詞

Dog_003 -> OK 
Dog003 -> NOT OK 
Dog_003_ -> NOT OK 

這是不允許的:

DoG 
DOg 
DOG (only first letter is uppercase) 
Cat_Dog_ 
_Cat_Dog_ (_ can be only between words) 

它將在Python被使用。

我的解決方案

reTitle2 = re.compile(
      """ 
      ^([A-Z]{1}|[A-Z]{1}[a-z]*|[0-9]+)   # first part 
       (_[A-Z]{1}|_[A-Z]{1}[a-z]*|_[0-9]+)*  # zero or more times 
       ([A-Z]{1}|[A-Z]{1}[a-z]*|[0-9]+){0,1}$ # last part 
      """ 
      , re.UNICODE | re.VERBOSE) 

有一些多餘的部分,但是我使它更容易理解。

回答

1

我的解決方案

reTitle2 = re.compile(
      """ 
      ^([A-Z]{1}|[A-Z]{1}[a-z]*|[0-9]+)   # first part 
       (_[A-Z]{1}|_[A-Z]{1}[a-z]*|_[0-9]+)*  # zero or more times 
       ([A-Z]{1}|[A-Z]{1}[a-z]*|[0-9]+){0,1}$ # last part 
      """ 
      , re.UNICODE | re.VERBOSE) 

有一些多餘的部分,但是我使它更容易理解。

3

的正則表達式是:

[A-Z][a-z]*(_([A-Z][a-z]*|[0-9]+))* 

,或者,如果003_Dog被允許:

([A-Z][a-z]*|[0-9]+)(_([A-Z][a-z]*|[0-9]+))* 
+0

你的正則表達式不好(例如,它接受狗),但我給了我一些想法。我發佈了我的想法。 – WebOrCode

+0

它只是缺少錨點。 – Toto

相關問題