正则表达式,其中单词中的第一个字母为大写,单词由_包围

时间:2013-11-26 10:21:11

标签: python regex

基本上我不会只接受这样的正则表达式:

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)

有一些冗余部分,但我更容易理解。

2 个答案:

答案 0 :(得分: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]+))*

答案 1 :(得分: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)

有一些冗余部分,但我更容易理解。