天天看点

python-正则化基本语法

代码 说明 举例
. 匹配除换行符外任意字符
[abc] 字符集合,只能表示一个字符位置,匹配所包含的任意一个字符 [abc]匹配plain中的’a’
[^abc] 字符集合,只能表示一个字符位置,匹配除去集合内字符的任意字符 [^abc]可以匹配plain中的p、l、a、i、或者n
[a-z] 字符范围,也是个集合,表示一个字符的位置,匹配所包含的任意一个字符 常用[A-Z][0-9]
[^a-z] 字符范围,也是个集合,表示一个字符的位置,匹配除去集合内字符的任意字符
\b 匹配单词边界 \bb在文本中找到单词中b开头的b字符
\B 不匹配单词边界 t\B包含t的单词但是不以t结尾的t字符,例如write,\Bb不以b开头的含有b的单词,例如able
\d [0-9] 匹配1位数字
\D [^0-9]匹配一位非数字
\s 匹配一位空白字符,包括换行符,制表符,空格[\f\r\n\t\v
\S 匹配一位非空白字符
\w 匹配[a-zA-Z0-9_]包括中文的子
\W 匹配除\w之外的字符

重复

代码 说明 举例
* 表示前面的正则表达式会重复 单词中有e然后后边非空字符
+ 表示前边的正则表达式重复至少一次 e\w+单词中e后边至少有一个非空字符
表示前边的正则表达式会重复0次或1次 e\w?单词中e后边至多有一个非空字符
{n} 重复固定的n次 e\w{1}单词中e后边只能有一个非空字符
{n,} 重复至少n次 e\w{1,}等价于e\w+ e\w{0,}等价于e\w* e\w{0,1}等价于e\w?
{n,m} 重复n到m次 e\w{1,10}单词中e后边至少1个,至多10个非空白字符

示例:

匹配手机号码:13552670000
\d{11}
匹配中国座机025-83105736  0534-7777777
\d{3-4}-\d{7-8}
           
代码 说明 举例
x|y 匹配x或者y wood took foot food 使用w|food 或者(w|f)ood
捕获(pattern) 使用小括号指定一个子表达式,也叫分组,捕获后会自动分配组号从1开始,可以改变优先级
\数字 匹配对应分组 (very)\1匹配very very 但捕获的组group是very
(?:pattern)
?exp (?'name’exp 通过name访问分组 python语法必须是(?Pexp)

断言

代码 说明 举例
(?=exp) 断言exp一定在匹配的右边出现,也就是说断言后边一定跟个exp f(?=oo)f后边一定有oo出现
(?<=exp) 断言exp一定在匹配的左边出现,也就是说前面一定有个exp前缀 (?<=t)ook ook前一定有t出现
(?!exp) 断言exp一定不会出现在右侧,也就是说断言后面一定不是exp \d{3}(?!\d)匹配3位数字 断言3位数字后边一定不能是数字
(?<!exp) 断言exp一定不能出现在左侧,也就是说断言前面一定不能是exp (?<!f) ood ood的左边一定不是f
(?#comment) 注释

贪婪与非贪婪

代码 说明 举例
*? 匹配任意次,但尽可能少重复
+? 匹配至少一次,但尽可能少重复
?? 匹配0次或1次 但尽可能少重复
{n,}? 匹配至少n次 但尽可能少重复
{n,m}? 匹配至少n次 至多m次 但尽可能少重复