我想要一个正则表达式来检查字符串是否只包含大写和小写字母、数字和下划线,但下划线不应该是字符串中的第一个或最后一个字符,因为我在下面尝试在 Python 中使用。
"^[a-zA-Z0-9_]*$"
我想要一个正则表达式来检查字符串是否只包含大写和小写字母、数字和下划线,但下划线不应该是字符串中的第一个或最后一个字符,因为我在下面尝试在 Python 中使用。
"^[a-zA-Z0-9_]*$"
您可以使用此正则表达式:
^(?!_)\w*(?<!_)$
\w
相当于[A-Za-z0-9_]
我使用否定前瞻(?!)
来检查第一个字符不是_
,而使用否定后瞻(?<!)
来检查最后一个字符不是_
。
使用您的标准指定可选的结尾。
'^([a-zA-Z0-9]([a-zA-Z0-9_]*[a-zA-Z0-9])?)?$'
外括号允许空字符串,就像您最初的尝试一样。如果您不希望匹配空字符串,您可以通过删除开始括号和带有问号量词的结束括号来简化。
另请注意,为简单起见,我使用了捕获括号;将左括号转换为非捕获(?:
据说也会使其运行得更快一些,尽管在这种简单的情况下,这几乎无关紧要。
正如@JoelCornett 所建议的,您可以使用re.match
仅在开头显式搜索字符串并删除^
锚点。