2018-10-23

#Author ddz

"""

正则表达式 是用匹配或者描述 字符串的工具

用处:

a.判断字符串是否满足某个条件(匹配)---判断输入是否为邮箱/号码/ip地址

b.提取满足条件的字符串

c.字符串替换

re模块中相应方法来支持正则表达式的匹配、查找、替换等功能

"""

from reimport fullmatch

"""

fullmatch(正则表达式, 字符串) --判断是否全匹配

正则表达式:就是一个字符串,其中是正则表达式语法,前加r''阻住转义

两部分:1、正则语法对应的字符 2、普通字符

返回值: None 或 <_sre.SRE_Match object; span=(0, 2), match='11'>

1、  .(匹配任意字符)  一个 点 之匹配一个任意字符

2、  \w(匹配任意一个 字母/数字/下划线)

\W(匹配任意一个 非 字母/数字/下划线)

3、  \s(匹配任意一个 空白字符,空格、制表符、换行(回车)都是空白字符)

\S(匹配任意一个 not 空白字符)

4、  \d(匹配任意一个 数字字符)

\D(匹配任意一个 not 数字字符)

5、  \b(检测单词边界) -->一个\b不会去匹配一个字符,而是单纯的检测\b出现的位置是否是单词边界

单词边界:字符串开始和结尾、空格、换行、标点符号等,可以将两个单词隔开的字符都是单词边界

\B(检测 not 单词边界)

6、  ^(检测是否是字符串开头)

7、  $(检测是否是字符串结尾)

8、  [](匹配 中括号 里出现在的任意 一个字符)

example: [字符集] -->[abd],匹配abd中任意一个

[字符1-字符2] -->匹配Unicode编码值1到2中任意一个

注意:- 在中括号中,如放在两数字间表示范围

9、  [^字符集](匹配一个不在字符集中的任意字符),^必须放在最前面才有效

特殊用法:

10、  *(匹配0次或多次)

字符* -->表示出现0次或多次

11、  +(匹配一次或多次)

字符+ -->表示出现1次或多次

12、  ?(匹配0次或1次)

字符? -->表示出现0次或1次  例:[+-]?

13、  {}(直接指定次数)

{N}    匹配N次

{M,N}  匹配M到N次

{M,}    至少匹配M次

{,N}    至多匹配N次

"""

print(fullmatch(r'^\b[^4-9[][avdsd是]\w.\s..\d$','2是a1\n16'))

print(fullmatch(r'[a-zA-Z_]\w*','adfssdfr3*sdf'))

print(fullmatch(r'[+-]?[1-9][0-9]*','11114511011'))

print(fullmatch(r'[a-zA-Z0-9]{6,16}','111L145161011'))

"""

1、  | 分之 ,条件1 | 条件2  re_str=r'abc|b|dd'(匹配成功abc,dd,b)

先用条件1去匹配,若成功就匹配成功,若失败再去匹配条件2

注意:会把 | 前后作为一个整体条件

2、  () 分组 ,

a 组合,将括号内容作为一个整体

b 捕获,使用带括号的正则表达式匹配成功后,只捕获括号内容

c 重复,在正则表达式中通过\数字来重复()中匹配的内容,内容出现在\数学处,数字代表前面第几个分组

3、  转义字符

正则表达式在特殊符号(. + *...)前加\,让其无意义

注意;在中括号内,特殊符号无特殊意义,代表自己

\ 在哪 都需要转义

- 在[]外无特殊意义,在[]中要表示- ,就不要放在两个字符之间

"""

print(fullmatch(r'(a)bb\1([1f])jfh','abbafjfh'))

"""

1、  compile(正则表达式字符串)

将正则表达式字符串转换成正则表达式对象

re_ob=re.compile(r'\d+'); re_ob.fullmath('5555')

2、  fullmatch(正则表达式, 字符串) --判断是否全匹配

返回值 匹配对象 或 None

<_sre.SRE_Match object; span=(0, 8), match='abbafjfh'>

1.对象.span(0) -->获取匹配成功的区间,左闭右开,group=0默认全匹配

对象.start(0)/end(0)-->获取开始、结束下标

2.对象.group()/group(0)-->获取正则表达式完全匹配的结果

对象.group(group>0)-->获取正则表达式第index个分组(括号代表分组)匹配结果

3.对象.string()--> 获取匹配原字符串

3、  search(正则表达式, 字符串)  -->判断是否部分匹配

4、  match(正则表达式, 字符串) -->匹配字符串开头

5、  findall(正则表达式, 字符串)-->获取字符串中满足正则表达式的所有子串,返回一个列表

注意:如正则表达式中有分组,只取分组中匹配到的,如有多个分组 匹配到每组结果放进一个元组内

6、  finditer(正则表达式, 字符串)-->获取字符串中满足正则表达式的所以子串,返回值是迭代器,其元素是匹配对象

7、  split(正则表达式, 字符串)-->将字符串按照满足正则表达式的子串进行分割,返回列表

8、  sub(正则表达式,new,字符串)-->将字符串按照满足正则表达式的子字符串 替换 成新字符串

"""

你可能感兴趣的:(2018-10-23)