字母数字字符串的正则表达式,下划线不应是第一个或最后一个字符

时间:2012-08-18 07:18:35

标签: python regex python-3.x python-2.7

我想有一个正则表达式来检查字符串是否只包含大写和小写字母,数字和下划线,但下划线不应该是字符串中的第一个或最后一个字符,我在下面尝试使用Python

"^[a-zA-Z0-9_]*$"   

2 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式:

^(?!_)\w*(?<!_)$

\w相当于[A-Za-z0-9_]

我使用否定向前看(?!)来检查第一个字符不是_,而使用否定后瞻(?<!)来检查最后一个字符是不是_。< / p>

答案 1 :(得分:1)

使用您的条件指定可选结尾。

'^([a-zA-Z0-9]([a-zA-Z0-9_]*[a-zA-Z0-9])?)?$'

外部括号是允许空字符串,就像您原来的尝试一样。如果您不希望匹配空字符串,可以通过删除开头括号和带有问号量词的右括号来简化。

另请注意,为了简单起见,我使用了捕获括号;将开头括号转换为非捕捉(?:也可能会让它更快一些,尽管在这个简单的情况下,它几乎不重要。

根据@JoelCornett的建议,您可以使用re.match仅在字符串的开头显式搜索字符串并删除^锚点。