2013-05-17 25 views
2

我是新来的正则表达式,我试图在Python中产生以下条件。匹配3和16个字符的Python正则表达式

字符串和字符与存在 含有一个连字符字母数字或(但不能作为第一个或最后一个字符)。

这是我到目前为止有:

rule = re.compile(r'(^{0,16})') 

    if rule.search(value): 
     msg = u"Does not validate" 
     raise ValidationError(msg) 
+1

您正在寻找该行的开始,连续0-16次。 – Elazar

回答

3

您可以使用format缩短它:

'{0}({0}|-){1}{0}'.format('[a-zA-Z0-9]','{1-14}') 

@捅的版本更好如果不区分大小写的要求是内在整个查询。

+0

机器制造机器。多么乖乖! – georg

5
re.compile('[A-Z0-9][A-Z0-9-]{1,14}[A-Z0-9]', re.I) 

这将在开始和结束时接受字母数字字符,并要求在1之间太14个字母数字或连字符的字符。

+2

@ User7 - 请注意,连字符*必须是* []'表达式中的最后一个字符,以便与其匹配。 – Elazar