\d 数字:[0-9]
\D 非数字:[^\d]
\s 匹配任何空白字符:[<空格>\t\r\n\f\v]
\S 非空白字符:[^\s]
\w 匹配包括下划线在内的任何字字符:[A-Za-z_0-9]
\W 匹配非字母字符, 即匹配特殊字符
\A 仅匹配字符串开头, 同 ^
\Z 仅匹配字符串结尾, 同 $
\b 单词边界 eg: 严格匹配 abc \babc\b
(?P<name>) 分组, 除了原有的编号外再指定一个额外的别名
(?P=name) 引用别名为 < name > 的分组匹配到字符串
re 模块中常用功能函数:
1,compile() 编译正则表达式模式, 返回一个对象的模式
格式:
re.compile(pattern,flags=0)
pattern: 编译时用的表达式字符串.
flags 编译标志位, 用于修改正则表达式的匹配方式
flags 类型:
re.S(DOTALL) 使. 匹配包括换行在内的所有字符
re.I(IGNORECASE)使匹配对大小写不敏感
re.L(LOCALE)做本地化识别 (locale-aware) 匹配, 法语等
re.M(MULTILINE) 多行匹配, 影响 ^ 和 $
re.X(VERBOSE) 该标志通过给予更灵活的格式以便将正则表达式写得更易于理解
re.U 根据 Unicode 字符集解析字符, 这个标志影响 \ w,\W,\b,\B
2,match() 决定 RE 是否在字符串刚开始的位置匹配
格式:
- re.match(pattern, string, flags=0)
- 3,search()
格式:
re.search(pattern, string, flags=0)
re.search 函数会在字符串内查找模式匹配, 只要找到第一个匹配然后返回
match 和 search 一旦匹配成功, 就是一个 match object 对象, 而 match object 对象有以下方法:
group() 返回被 RE 匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束位置
span() 返回一个元组包含匹配 (开始, 结束) 的位置
groups() 方法返回一个包含正则表达式中所有小组字符串的元组, 从 1 到所含的小组号, 通常 groups()不需要参数, 返回一个元组, 元组中的元就是正则表达式中定义的组
- print(re.search("([0-9])([a-z])([0-9])",a).group(3))
- 4,findall()
re.findall 遍历匹配, 可以获取字符串中所有匹配的字符串, 返回一个列表
格式:
- re.findall(pattern, string, flags=0)
- 5.finditer()
搜索 string, 返回一个顺序访问每一个匹配结果 (Match 对象) 的迭代器. 找到 RE 匹配的所有子串, 并把它们作为一个迭代器返回
- re.finditer(pattern, string, flags=0)
- 6,split()
按照能够匹配的子串将 string 分割后返回列表
格式:
re.split(pattern, string[, maxsplit])
maxsplit 用于指定最大分割次数, 不指定将全部分割
7,sub()
使用 re 替换 string 中每一个匹配的子串后返回替换后的字符串
re.sub(pattern, repl, string, count)
re.match 只匹配字符串的开始, 如果字符串开始不符合正则表达式, 则匹配失败, 函数返回 None; 而 re.search 匹配整个字符串, 直到找到一个匹配
?,+?,??,{m,n}? 前面的 *,+,? 等都是贪婪匹配, 也就是尽可能匹配, 后面加? 号使其变成惰性匹配
来源: http://www.bubuko.com/infodetail-2821302.html