Python正则表达式学习

1.正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在Pyhon中有re模块提供正则表达式。

2.正则表达式基础

2.1 子模式

\w : 匹配任意字母、数字 或者 _
\d : 匹配数字
\s : 匹配空白符号(空格、Tab等)
.  : 匹配任意字符

2.2 重复子模式

\d* : 表示任意个数字,包括0个
\w+ : 表示匹配至少一个字母、数字 或者 _
\w{3:8} : 表示匹配3-8之间个字母、数字 或者 _

2.3 “或” 运算 : |

(p|P)ython : 可以匹配python 也可以匹配Python

2.4 选择符 : ?

(http://)?(www.)?(admintony.com) :可以匹配http://admintony.com \ http://www.admintony.com \ www.admintony.com \ admintony.com  (也就是:字符串中必须存在最后一个元组才能被匹配到)

2.5 字符集 : []

[a-zA-Z0-9\_] : 等价于\w
[0-9a-zA-Z\.\_] : 匹配数字、字母、. 和 _

2.6 开始符和结尾符 : ^ 、 $

^\d : 以数字开始
\w$ :以字母结尾
^[a-zA-Z][0-9a-zA-Z\_]* : 匹配python的合法变量

2.7 分组 : ()

2.7.1 捕获组

(^[0-9a-zA-Z]\w{5,17})@[0-9a-zA-Z]+\.\w+ : 匹配邮箱用户名

2.7.2 非捕获组

(^[0-9a-zA-Z]\w{5,17})@[0-9a-zA-Z]+\.(?:net|com|top|cn) :捕获指定后缀名的邮箱用户名

(?:\d+\.){3}\d+ : 匹配IP

3.Python的re模块

3.1 re模块的用法

1
2
3
4
5
6
7
8
9
import re

str = "xxxflag{xxx}xxx"
# 用法1:
re_flag = re.compile(r'flag{\w+?}')
flag = re_flag.findall(str)

# 用法2:
flag = re.findall(r'flag{\w+?}',str)

3.2 贪婪匹配和非贪婪匹配

  • 贪婪模式下 :正则表达式想匹配最多的元素

  • 非贪婪模式下:尽可能少的匹配

3.3 match 和 search的区别

  • match 只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None

  • search 匹配整个字符串,直到找到一个匹配

3.4 分组匹配