re是python中的正则表达式模块,正则也是每个人编程之路上必备的基础技能。这博客希望即便从来没接触过的人看了也会使用正则表达式
特殊符号及用法
字符 | 含义 |
---|---|
. | 匹配除了换行符外的任何字符。(可以用re.DOTALL来设置匹配任何字符,包括换行符) |
丨 | A丨B ,表示正则表达式匹配A或者B |
^ | 匹配输入字符串开始的位置,如果设置了re.MULTILINE标志,也可以匹配换行符后的位置 |
$ | 匹配输入字符串结束的位置,如果设置了re.MULTILINE标志,也可以匹配换行符前的位置 |
| | 将一个普通字符变成特殊字符 |
* | 匹配前面的子表达式0次或者多次 |
+ | 匹配前面的子表达式1次或者多次 |
? | 匹配前面的子表达式1次或者0次 |
[] | 匹配所包含的任意一个字符 |
\A | 匹配输入字符串的开始位置 |
\Z | 匹配输入字符串的结束位置 |
\b | 匹配一个单词边界 |
\B | 匹配一个非单词边界,正好与\b相反 |
\d | 匹配数字[0-9] |
\D | 与\d相反匹配所有非[0-9]的数字 |
\s或者\S | 前者匹配空白字符,后者匹配非空白字符 |
\w或者\W | 前者匹配单词字符与数字,下划线等价于[A-Za-z0-9],后者与其相反 |
re中的常用方法
re.findall()
从字符串中匹配出相应的字符序列,返回值是list,元素是匹配到的每个字符序列。
import re
#从一个字符串中匹配出所有的数字
str = 'aaqtas123nvj654yyyajkv'
result1 = re.findall('\d+',str)
print(result1)
输出:['123', '654']
findall()还有第三个参数可以使用,并且这第三个参数使用“|”分开使其多个一起生效。
str2 = 'AATGJYO123LIAA'
result2 = re.findall('aa',str2)
print(result2)
输出:[]
str2 = 'AATGJYO123LIAA'
result2 = re.findall('aa',str2,re.I)
print(result2)
输出:['AA', 'AA']
从上面的例子中我们可以看到当没加re.I的时候因为str中的AA是大写的,但是匹配规则是小写的aa,从而导致无法匹配成功,但是我们把标志位re.I加上就匹配出来了,说明该标志位可以无视大小写匹配!
re中的标志位还有很多哦,这里直接列个表好了。
标志位 | 含义 |
---|---|
re.I | 匹配时候无视大小写 |
re.S | 使‘.’可以匹配出包括换行符在内的内容 |
re.M | 可以进行多行匹配,就是前面特殊字符中第三四个里面说的re.MULTILINE |
re.L | 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定 |
re.U | 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性 |
re.U | 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。 |
str3 = 'qWD\nad'
result3 = re.findall('wd.',str3)
print(result3)
输出:[]
str3 = 'qWD\nad'
result3 = re.findall('wd.',str3,re.I)
print(result3)
输出:[]
str3 = 'qWD\nad'
result3 = re.findall('wd.',str3,re.I|re.S)
print(result3)
输出:['WD\n']
从上面的例子我们可以看到,第二个我加上了无视大小写也输出了空,是因为后面\n被视为换行符,所以’ . '没有匹配到东西,无法输出,加上之后无视了大小写并且将\n输出了。