【问题标题】:Regular expression for alphanumeric string, underscore should not be a first or last character字母数字字符串的正则表达式,下划线不应是第一个或最后一个字符
【发布时间】:2012-08-14 13:07:55
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

用你的标准指定一个可选的结尾。

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

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

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

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

【讨论】:

  • 嗯,小写字符?不过,除此之外它是正确的。
  • 嗯,我们的答案看起来非常相似,如果我按照您的建议进行更改,实际上将是相同的。我相信你在我之前发布了你的,所以我会继续删除我的并为你的。
  • 我刚刚对你的re.match 建议投了赞成票……我会添加进去的。
【解决方案2】:

你可以使用这个正则表达式:

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

\w 等价于[A-Za-z0-9_]

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

【讨论】:

  • @thg435:我只是盲从 OP 的例子(即使 OP 不知道他/她在做什么)。
猜你喜欢
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 2021-09-04
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多