正则表达式提取字符串
工作中遇到一个这样的需求:需要从一个字符串中提取若干个个子字符串,要求该子字符串中:至少含有一个数字和一个字母且仅有数字和字母组成,且长度大于3位
例如以下字符串中,需要提取出关键词’350T’, ‘320K5’
“2016这是一段测试文字350T,需要320K5匹配型号”
正则匹配的关键代码如下:
content = '这是一段测试文字350T,需要320K5匹配型号'
pattern = r'(?=[A-Za-z\d]*[a-zA-Z])(?=[A-Za-z\d]*\d)[A-Za-z\d]{3,}'
print(re.findall(pattern, content))
打印结果:
['350T', '320K5']
正则表达式拆分含义:
- ?=pattern :正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用
- [A-Za-z\d] :匹配大小写字母和数字
- *:量词,表示0~n个,
?=[A-Za-z\d][a-zA-Z] =意思就是必须匹配一个字母,该字母前面只能是0个或n个数字或字母;
?=[A-Za-z\d][\d] 同理,就是必须匹配一个数字,该数字前面只能是0个或n个数字或字母;
[A-Za-z\d]{3,} 表示匹配3位及以上的字母和数字。
合起来表达的意思就是 匹配3位及以上由数字和字母组成的字符串,该字符串包含至少一个数字和一个字母。