首页 > 解决方案 > Python 正则表达式匹配包含字母和数字的 8 个字符的字符串

问题描述

我正在尝试匹配一个长度为 8 的字符串,其中包含数字和字母(不能只有数字或字母)re.findall使用 字符串可以以字母或字母开头,后跟任意组合。

例如-

输入字符串:The reference number is 896av6uf and not 87987647 or ahduhsjs or hn0.

输出:['896av6uf','a96bv6u0']

我想出了这个正则表达式,r'([a-z]+[\d]+[\w]*|[\d]+[a-z]+[\w]*)'但是它也给了我少于 8 个字符的字符串。需要修改正则表达式以返回包含字母和字母的正好 8 个字符的字符串。

标签: pythonregex

解决方案


您可以使用

\b(?=[a-zA-Z]*[0-9])(?=[0-9]*[a-zA-Z])[a-zA-Z0-9]{8}\b
\b(?=[^\W\d_]*\d)(?=\d*[^\W\d_])[^\W_]{8}\b

第一个仅支持 ASCII 字母,而第二个支持所有 Unicode 字母和数字,因为[^\W\d_]匹配任何 Unicode 字母并\d匹配任何 Unicode 数字(re.UNICODE在 Python 3.x 中默认使用该选项)。

细节:

  • \b- 单词边界
  • (?=[a-zA-Z]*[0-9])- 在任何 0+ ASCII 字母之后,必须有一个数字
  • (?=[0-9]*[a-zA-Z])- 在任何 0+ 位之后,必须有一个 ASCII 字母
  • [a-zA-Z0-9]{8}- 八个 ASCII 字母数字字符
  • \b- 单词边界

推荐阅读