我想有一个正则表达式来检查字符串是否只包含大写和小写字母,数字和下划线,但下划线不应该是字符串中的第一个或最后一个字符,我在下面尝试使用Python
"^[a-zA-Z0-9_]*$"
答案 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
仅在字符串的开头显式搜索字符串并删除^
锚点。