正则表达式

1.正则表达式对python对支持:

  • 1.1普通字符

    字母、数字、汉字、下划线、以及没有特殊定义的符号,都是"普通字符"。正则表达式中的普通字符,在匹配的时候,只匹配与自身相同的一个字符。例如:表达式c,在匹配字符串abcde时,匹配结果是:成功;匹配到的内容是c;匹配到的位置开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)

    match()函数

    • match(pattern, string, flags=0)

    • 第一个参数是正则表达式,如果匹配成功,则返回一
      个match对象,否则返回一个None

    • 第二个参数表示要匹配的字符串

    • 第三个参数是标致位用于控制正则表达式的匹配方式 如: 是否区分大小写,多行匹配等等

import re
s = 'python and java'
pattern = 'python'
result=re.match(pattern,s)
if result:
    print(result.start())  # 0
    print(result.end())  # 6
    print(result.group()) #python
    print(result.span())  #(0, 6)
else:
    print('未有匹配')
  • 1.2 元字符

表达式 匹配
. 小数点可以匹配除了换行符 \n 以外的任意一个字符
| 逻辑或操作符
[] 匹配字符集中的一个字符
[^] 字符集求反,也就是上面的反操作。尖号必须在方括号的最前面
- 定义[ ]里的一个字符区间,例如[1-9]
\ 转义字符
() 对表达式进行分组,将圆括号内的内容作为一个整体,并获得匹配的值
  • 1.3 转义字符集

表达式 匹配
\r,\n 匹配回车和换行符
\t 匹配制表符
\ 匹配斜杠\
^ 匹配^字符
$ 匹配$字符
. 匹配小数点.字符
  • 1.4 预定义匹配字符集

表达式 匹配
\d 任意一个数字,0-9中的任意一个
\w 任意一个字母或者数字或者下划线,也就是0-9,A-Z,a-z,_中的任意一个
\s 空格,制表符,换页符等空格字符的其中任意一个
\D \d的反集,也就是非数字的任意一个字符,等同于[^\d]
\W \w的反集,等同于[^\w]
\S \s的反集,等同于[^\s]
  • 1.5 重复匹配

表达式 匹配
{n} 表达式重复n次,比如\d(2)相当于\did,at3)相当于aaa
{m,n} 表达式至少重复m次,最多重复n次,比如ab(1,3可以匹配ab或abb或abbb
{m,} 表达式至少重复m次,比如w\d{2,}可以匹配a12,1111,M123等等
? 匹配表达式0次或者1次,相当于{0,1},比如a[cd]?可以匹配a,ac,ad
+ 表达式至少出现1次,相当于{1,},比如a+b可以匹配ab,aab,aaab等
* 表达式出现0次到任意次,相当于{0,},比如^*b可以匹配b,人航.
等等
  • 1.6 位置匹配和非贪婪匹配

表达式 匹配
^ 在字符串开始的地方匹配,符号本身不匹配任何字符
$ 在字符串结束的地方匹配,符号本身不匹配任何字符
\b 匹配一个单词边界,也就是单词和空格之间的位置,符号本身不匹配任何字符
\B 匹配非单词边界,即左右两边都是\w范围或者左右两边都不是\w范围时的字符缝隙

贪婪与非贪婪模式

在重复匹配时,正则表达式默认总是尽可能多的匹配,这被称为贪婪模式。例如,针对文本dxxxdxxxd,表达式(d)(\w+)(d)中的\w+将匹配第一个d和最后一个d之间的所有字符xxxdxxx。可见,\w+在匹配的时候,总是尽可能多的匹配符合它规则的字符。同理,带有?、*和{m,n}的重复匹配表达式都是尽可能地多匹配.

功能 表达式
数字 ^[0-9]*$
n位的数字 ^\d{n}$
至少n位的数字 ^\d{n,}$
零和非零开头的数字 ^(0 | [1-9][0-9]*)$
有两位小数的正实数 ^[0-9]+(\.[0-9]{2})?$
非零的负整数 ^-[1-9]\d*$
非负浮点数 ^\d+(\.\d+)?$
浮点数 ^(-?\d+)(\.\d+)?$

2.re模块常用方法

方法 描述 返回值
compile(pattern,[flags]) 将包含正则表达式转化为对象 re对象(可以直接执行match,search等方法
search(pattern,string,[flags]) 在字符串中查找 返回第一个匹配对象或者none
match(pattern,string,[flags]) 在字符串的开始处匹配模式 返回字符串开头匹配到的对象或者none
split(pattern,string,[maxsplit=0,flags]) 根据模式的匹配项来分割字符串 分割后的字符串列表
findall(pattern,string,[flags]) 列出字符串中模式的所有匹配(不使用group方法取值 所有匹配到的的字符串列表
sub(pat,repl,string,[count=0,flags]) 将字符串中所有的pat的匹配项用repl替换 完成替换后的新的字符串

flag匹配模式

匹配模式 描述
re.I 不区分大小写
re.M 开启多行模式

你可能感兴趣的:(正则表达式)