. 匹配任意一个字符,换行符除外
\ 代表字符本身,比如 a\.c匹配a.c,\[匹配[而不是正则中的[]
[...] `匹配括号中出现的任意单个字符
[^...] `不匹配方括号中列出的单个字符,比如[^123]匹配除123以外的字符
\d 匹配0-9任意一个数字
\D 匹配任意一个非数字的字符,等价于 [^\d]
\s 匹配任意一个空白字符,
\S 匹配任意一个非空白的字符
\w 匹配一个字母或数字,字符范围[A-Za-z0-9_]
\W 非单词字符
* 匹配前一个字符0次或1次或多次
+ 匹配前一个字符1次或多次
? 匹配前一个字符0次或1次
{m} 匹配前一个字符m次
{m,n} 匹配前一个字符0-n次,最多n次
^ 开头
$ 结尾
\A 仅匹配字符串的开始
\b 匹配一个单词的边界,即单词到空格的位置,比如'st'可以匹配
‘test abc’中的st,但不能匹配‘tester abc’中的st
\B 与\b 相反,表示匹配非单词边界,如上例中可以匹配tester abc中是st,而不能匹配test abc中的st
\Z 匹配匹配字符串结束,存在换行的话明知匹配到换行前的结束字符
比如abc\Z匹配abc
| 或,逻辑匹配符
(...) 后向引用/分组匹配,小括号括起来的的正则表达式作为分组
(?P<number>) 分组引用,引用分组编号为number的分组
(?P=name) 分组引用,引用分组命名为name的分组
前向否定断言
后向否定断言
前向肯定断言
后向肯定断言
pattern对象
是一个编译好的正则表达式,不能直接实例化,必须使用re.compile()函数进行构造
p = re.compile()对正则表达式进行编译,返回一个Pattern对象
例子
从一个字符串中找出来ip
>>> s = "abc10.249.1.99hello192.168.1.101world"
>>> re.findall(r'[12]\d{1,2}\.\d{1,3}\.\d{1,3}\.\d{1,3}',s)
['10.249.1.99', '192.168.1.101']
>>> re.findall(r'[12]\d{1,2}\.\d{1,3}\.\d{1,3}',s)
['10.249.1', '192.168.1']
使用pattern的写法就是这样
>>> p = re.compile(r'[12]\d{1,2}\.\d{1,3}\.\d{1,3}')
>>> p.findall(s)
['10.249.1', '192.168.1']