模块-正则模块:re
作者:互联网
re模块
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
re模块不是内置的,是属于标准库的,创建模块不要与标准库模块名重名,容易发生冲突
常用匹配模式(元字符):
re.findall('正则表达式','字符串') # 找所有符合的内容
import re
print(re.findall('l', 'hello')) #找所有的 l
# ['l', 'l']
print(re.findall('\w', 'hello _/*-+ world')) # 匹配字母、数字、下划线
# ['h', 'e', 'l', 'l', 'o', '_', 'w', 'o', 'r', 'l', 'd']
print(re.findall('\W', 'hello _/*-+ world')) # 匹配非字母、数字、下划线
# [' ', '/', '*', '-', '+', ' ']
print(re.findall('\s', 'hello _/\r*\f-\t+\n world')) # 匹配任意空白字符,等价于[\t,\n,\f,\r]
# [' ', '\r', '\x0c', '\t', '\n', ' ']
print(re.findall('\S', 'hello _/\r*\f-\t+\n world')) # 匹配任意非空白字符
# ['h', 'e', 'l', 'l', 'o', '_', '/', '*', '-', '+', 'w', 'o', 'r', 'l', 'd']
print(re.findall('\d', 'he1l3l2o4')) # 匹配任意数字【1-9】
# ['1', '3', '2', '4']
print(re.findall('\D', 'he1l3l2o4')) # 匹配任意非数字
# ['h', 'e', 'l', 'l', 'o']
^ $ \A \Z
import re
print(re.findall('^egon','eogn egon eglheon hlegon')) # ^ :只找开头 []
print(re.findall('^egon','egon egon eglheon hlegon')) # ^ :只找开头 ['egon']
print(re.findall('egon$','egon egon eglheon hlegon')) # ^ :只找末尾 ['egon']
print(re.findall('^egon','''egon
egon
eglheon
hlegon''',re.MULTILINE)) # ^ :换行模式 ,只找开头 ['egon', 'egon']
print(re.findall('egon$','''egon
egon
eglheon
hlegon''',re.MULTILINE)) # ^ :换行模式 ,只找末尾 ['egon', 'egon', 'egon']
print(re.findall('\Aegon','''egon
egon
eglheon
hlegon''',re.MULTILINE)) # ^ :无视换行模式 ,只找开头 ['egon']
print(re.findall('egon\Z','''egon
egon
eglheon
hlegon''',re.MULTILINE)) # ^ :无视换行模式 ,只找末尾 ['egon']
^
指定匹配必须出现在字符串的开头或行的开头。
\A
指定匹配必须出现在字符串的开头(忽略 Multiline 选项)。
$
指定匹配必须出现在以下位置:字符串结尾、字符串结尾的 \n 之前或行的结尾。
\Z
指定匹配必须出现在字符串的结尾或字符串结尾的 \n 之前(忽略 Multiline 选项)。
重复匹配: . 分隔 * 分隔 ? 分隔 .* 分隔 .*? 分隔 + 分隔 {n,m} 分隔[ ]
# . 匹配除去换行\n的所有字符 调用re.DOTALL能匹配所有字符,包括换行\n
print(re.findall('a.b','abd acb aab a\nb aebd')) # ['acb', 'aab', 'aeb']
print(re.findall('a.b','abd acb aab a\nb aebd',re.DOTALL)) # ['acb', 'aab', 'a\nb', 'aeb']
# * 左边那一个字符出现0次到无穷次
print(re.findall('as*','ass asss assss bcsssassss')) # ['ass', 'asss', 'assss', 'assss']
# ?:左边那一个字符出现0次或者1次
print(re.findall('ab?','abc acb abb dba dab')) # ['ab', 'a', 'ab', 'a', 'ab']
# +:左边那一个字符出现1次到无穷次
print(re.findall('ab+','ab abb a acb abba')) # ['ab', 'abb', 'abb']
# {n,m}:左边那一个字符出现n次或m次
print(re.findall('ab{1,3}','a abbb abbbb acb abc ')) # ['abbb', 'abbb', 'ab']#
# {0,} 等同于*
# {0,1} 等同于?
# {1,} 等同于+
# [] 代表匹配一个字符,该字符可以是指定的字符
print(re.findall('a[0-9]c','a2b a2c a1c bac a c')) # ['a2c', 'a1c']
#.*默认为贪婪匹配 只要是范围内全要
print(re.findall('a.*b','abcaaaaacebdlkdbjfback')) # ['abcaaaaacebdlkdbjfb']
#.*?为非贪婪匹配:推荐使用 ,只取到第一个区间范围
print(re.findall('a.*?b','abcaaaaacebdlkdbjfback')) # ['ab', 'aaaaaceb']
#\# print(re.findall('a\\c','a\c')) #对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,会发生转义,然后交给re去执行,所以抛出异常
print(re.findall(r'a\\c','a\c')) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义
print(re.findall('a\\\\c','a\c')) #同上面的意思一样,和上面的结果一样都是['a\\c']
#():分组
print(re.findall('company|companies','Too many companies have gone bankrupt, and the next one is my company'))
# ['companies', 'company']
print(re.findall('compan(y|ies)','Too many companies have gone bankrupt, and the next one is my company'))
# ['ies', 'y']
标签:ab,匹配,egon,re,正则,模块,print,findall 来源: https://www.cnblogs.com/BaiJiaZhengMing/p/14659589.html