-
一些常见的匹配规则
模式 描述 \w 匹配字母、数字及下划线 \W 匹配不上字母、数字及下划线的字符 \s 匹配任意空白字符,等价于[\t\n\r\f] \S 匹配任意非空字符 \d 匹配任意数字,等价于[0-9] \D 匹配任意非数字的字符 \A 匹配字符串开头 \Z 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串 \z 匹配字符串结尾,如果存在换行,同时还会匹配换行符 \G 匹配最后匹配完成的地方 \n 匹配一个换行符 \t 匹配一个制表符 ^ 匹配一行字符串的开头 $ 匹配一行字符串的结尾 . 匹配任意字符,除了换行符 [...] 用来表示一组字符,单独列出,比如[amk]匹配a、m或k [^...] 不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符 * 匹配 0 或多个表达式 + 匹配 1 或多个表达式 ? 撇皮 0 或 1 个前面的正则表达式定义的片段,非贪婪模式 精确匹配 n 个前面的表达式 {n,m} 匹配 n 到 m 次由前面正则表达式定义的片段,贪婪模式 a|b 匹配 a 或 b () 匹配括号内的表达式,也表示一个组 -
match()
-
第一个参数传正则表达式,第二个参数传要匹配的字符串
-
返回的对象中:
- group() :获取到 匹配的内容
- span() : 获取匹配的范围
-
分组:
可以通过 括号 对某段匹配规则分组,使用 group() 可以获取到对应分组匹配到的数据,比如 group(1)
-
通用匹配
可以使用 .*(点星) 来匹配任何字符,因为 .(点) 代表可以匹配任何除了换行外的字符, *(星) 表示可以匹配多次,所以 .*(点星) 就是匹配任意字符。 -
贪婪和非贪婪
贪婪:
.* 会尽可能匹配多的字符,其他的字符就会匹配比较少非贪婪:
.*? 会尽可能的少匹配,给其他匹配跟多的字符 -
修饰符
修饰符 描述 re.I 是匹配对大小写不敏感 re.L 做本地话识别(locale-aware)匹配 re.M 多行匹配,影响^和$ re.S 使 . 匹配包括换行在内的所有字符 re.U 根据 Unicode 字符集解析字符。 影响\w, \W, \b, \B re.X 通过给予你更灵活的格式以便将正则表达式写的更易于理解 一般比较常用的是 re.S 和 re.I。
用法是在 match() 后面把这个值当第三个参数传入。
-
-
search()
由于 match() 是从开头才开始匹配的,如果开头不匹配就会导致全部匹配失败。
search() 是在字符串中搜索能够匹配上字符串,如果有就返回第一个匹配的内容,如果没有就返回 None 。
-
findall()
search() 搜索的是第一个匹配对象,如果要匹配多个,就要用 findall()
-
sub()
sub() 可以用来修改匹配的内容。
-
compile()
compile() 可以先把 正则字符串 编译成正则表达式对象,以便在后面的匹配中复用。