python - 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 个字符的字符串。
解决方案
您可以使用
\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
- 单词边界
推荐阅读
- html - 这段代码有问题吗?我是 html 和 css 的新手
- macos - 我什么时候应该使用 NSURLCanonicalPathKey?
- javascript - 阶乘递归,给出未定义
- keras - 如何从预训练的 ResNet 模型 Keras 的一层中提取特征
- android - 在 Mapview 的地图中心获取纬度/经度
- composer-php - 当 Composer 依赖在版本中发生冲突时,解决方法是什么?
- vue.js - Vue.js 子组件未更新
- java - 使用 Retrofit2 和 RxAndroid 处理条件响应
- node.js - 如何在反应中显示填充的文档
- r - 代码中的 R 预测变量未处理正确答案