python正则表达式02--findall方法和正则语法总结

346 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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