3

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

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

2 回答 2

4

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

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

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

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

于 2012-08-18T07:23:51.880 回答
1

使用您的标准指定可选的结尾。

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

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

另请注意,为简单起见,我使用了捕获括号;将左括号转换为非捕获(?:据说也会使其运行得更快一些,尽管在这种简单的情况下,这几乎无关紧要。

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

于 2012-08-18T07:23:02.447 回答