一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天
re.findall方法
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
- 注意:
与前面的match和search方法不同的是finall是检索所有内容,而match和search只能检索一次
finall返回值也不再是一个对象,而是一个列表
- 函数表达式:
re.finall(pattern, string, flags=0)
| 参数 | 意义 |
|---|---|
| flags | 控制正则表达式的匹配方式 |
| pattern | 正则表达式 |
| string | 要匹配的字符串(传入的变量) |
mgs = 'mzm43m234hm23c34m234h5234'
result = re.findall('[0-9][a-z][0-9]',mgs)
print(result)
这里我们来了一个问题,这样的正则怎么匹配
# a9s c02v d230b m2345n ...
mgs = 'a223bnc23vklsifjakf1d'
result = re.findall('[a-z][0-9]+[a-z]',mgs)
print(result)
>>> ['a223b', 'c23v', 'f1d']
在这里我们用现在学过的知识来写一个qq号的匹配
qq = '1727328835'
result = re.match('[1-9][0-9]{4,10}$')
print(result)
>>> <re.Match object; span=(0, 10), match='1727328835'>
小结
admin = 'admin001'
re.match('[a-zA-Z][0-9a-zA-Z]{5,}$',admin)
re.search('^[a-zA-Z][0-9a-zA-Z]{5,}$',admin)
re.findall('^[a-zA-Z][0-9a-zA-Z]{5,}$',admin)
- 注意以上在用match,search,findall时正则表达式的^和$必须依据三者的检索特点来判断是否写与不写
正则语法总结
-
'\A':表示从字符串的开始处匹配 -
'
\Z':表示从字符串结束处匹配,如果存在换行,只匹配到换行前的结束字符串 -
\b:匹配一个单词边界,也就是指单词和空格的位置。例如,'py\b'可以匹配"python"中的"py",但不能匹配"openpyxl"中的"py" -
\B:匹配非单词边界,也就是指单词和空格的位置。例如,"py\b"可以匹配"python"中的"py",但不能匹配"openpyxl"中的"py" -
\d:匹配任意数字,等价于[0-9] -
\D:匹配任意非数字字符,等价于[^\d] -
\s:匹配任意空字符串,等价于[\t\n\r\f] -
\S:匹配任意非空字符串,等价于[^/s] -
\w:匹配任意字母数字及下划线,等价于[a-zA-Z0-9] -
\W:匹配任意非字母数字及下划线,等价于[^\w] -
\\:匹配原义的反斜杠\ -
'.':用于匹配除换行符(/n)之外的所有字符 -
'^':用于匹配字符串的开始,即行首 () -
'$':用于匹配字符串的末尾(末尾如果有换行符\n,就匹配\n前面的那个字符),即行尾
定义正则验证次数的
-
'*':用于将前面的模式匹配0次或多次(贪婪模式,尽可能多的匹配) -
'+':用于将前面的模式匹配1次或多次(贪婪模式) -
'?':用于将前面的模式匹配0次或1次(贪婪模式) -
'*? , +? , ??':即上面三种特殊字符的非贪婪模式(尽可能少的匹配) -
{}:用于将前面的模式匹配m次 -
'{m,n}':用于将前面的模式匹配m次到n次(贪婪模式),最小匹配m次,最大匹配n次 -
'{m,n}?':即上面'{m,n}'的非贪婪版本 -
'\\':''是转义字符,在特殊字符前面加上\,特殊字符就会失去其所代表的含义,比如\+就仅仅代表+本身 -
'[]':用于标示一组字符,如果^是第一个字符,则表示的是一个补集。比如[0-9]表示所有的数字,[^0-9]表示除了数字外的字符 -
'|':不如A|B用于匹配A或B