0
点赞
收藏
分享

微信扫一扫

5.5day16正则表达式和分组

开源GIS定制化开发方案 2022-05-05 阅读 10
python

正则表达式

fullmatch(正则表达式,字符串) - 判断整个字符串是否完全符合正则表达式的规则,如果不符合返回None

1.re模块

from re import fullmatch

re提供的相关函数:

fullmatch search findall match split sub

python中提供正则表达式:r’正则表达式’

js中提供正则表达式的方式:/正则表达式/

2.匹配类符号 - 一个正则符号表示一类字符

匹配类符号在正则中的作用:用来要求字符串中某个位置必须是什么样的字符

1)普通符号 - 在正则表达式中表示这个符号本身,对应字符串中的字符的要求就是符号本身

result = fullmatch(r’abc’,‘abc’)

2). - .可以匹配任意字符

3)\d - 匹配任意一个数字字符

4)\s - 匹配任意一个空白字符

空白字符包括:空格 \n \t

fullmarch(r’a\sb’,‘a b’)

5)\w - 匹配任意一个数字,字母或者下划线或者中文

re = fullmatch(r'a\wb', 'a1b')
print(re)

6)\大写字母 - 与相应的小写字母的功能相反

\D - 匹配任意一个非数字字符

\S - 匹配人任意一个非空白字符

\W - 匹配一个非数字,字母,下划线或者中文

7)[字符集] - 匹配字符集中任意一个字符

1普通符号

2[特殊符号]

3[字符1-字符2] - [a-z],a到z任意一个字母

​ [a-z1-9],a到z和1到9任意一个

​ [\u4e00-\u9fa5\dabc]任意中文加数字加abc

8)[ ^字符集] - 匹配不在字符集中的任意一个字符(字符集的反集)

匹配次数

1)*- 匹配0次或者多次(任意次数)

a* - a出现任意次数

\d* - 任意多个\d -> 任意多个数字

[abc]* - 任意多个[abc] -> 任意多个(a或者b或者c)

2)+ - 匹配1次或者多次(至少一次)

3)? - 0次或1次

4){ }

{N} - N次

re = fullmatch(r'a\d{3}b', 'a123b')
print(re)

{M,N} - M到N次

{M,} - 至少M次

{,N} 最多N次

*= {0,}

+== {1,}

? == {0,1}

5.贪婪和非贪婪

search - 在字符串中国查找一个满足正则表达式的字串

贪婪:在次数不确定的情况下,对应的字符串在不同次数下有多种匹配结果,贪婪取最多次数对应的结果(前提是匹配成功次数最多的情况)

非贪婪:取最少次数对应的结果

search(r’\d+?',‘阿尔法二12312饿啊’) - 默认贪婪,加?后就取消贪婪,只取一次

在匹配次数不确定的时候,匹配分为贪婪和非贪婪

匹配次数不确定:* + ? {M,N} {N}

分组

分组就是在正则中用括号将正则中的部分内容括起来就形成了一个分组

1)整体操作

匹配:两个字母两个数组的结构重复3次

‘mn531jd900m789’

result = fullmatch(r'([a-zA-Z]{2}\d\d){3}','mn53jd90dm89')
print(result)

2)重复

在正则中:\N可以重复\N所在的位置的前面的第N个分组匹配到的内容

fullmatch(r’(\d\d)adf\1’,11adf11)

3)捕获 - 用( )的内容可以用xx.group( )提取出来

2.分支 - /

正则1 / 正则2 - 先用正则1匹配成功就直接成功,如果匹配失败再用正则2 进行匹配,如果匹配成功就成功,如果匹配失败则失败

匹配:abc后面是两个任意数字或者两个任意大写字母,‘abc11’,‘abcAS’

result = fullmatch(r’abc\d\d | abc[A-Z]{2}',‘abc12’)

或者

result = fullmatch(r’abc(\d\d | [A-Z]{2})','abc12)

1检测类符号

检测类符号不是匹配符号,不会要求某个位置必须是什么样的字符,而是用检测某个位置是否符合相关要求

1)\b - 检测是否是单词边界

单词边界 - 凡是可以用来将两个单词区分开的符号.例如:空白字符 标点符号 字符串开头 字符串结尾

findall - 提取符合要求的字符串

2)\B - 检测是否是非单词边界

3)^ - 检测是否是字符串开头([]外面)

4)$ - 检测是否是字符串结尾

2.转移符号

正则中的转义符号是指在本身就具备特殊功能的符号前加 \ ,让它本身剧本特殊功能消失变成一个普通符号

写一个正则匹配一个小数

result = fullmatch(r’\d.\d’,'2.3)

补充:独立存在有特殊意义的符号,放到[ ]中特殊功能会直接消失变成一个普通符号,例如: + * ?

1常用函数

re.fullmatc(正则,字符串) - 完全符合字符串

re.match(正则,字符串) - 匹配字符串开头

re.search(正则,字符串) - 匹配字符串中第一个满足正则的子串

re.findall(正则,字符串) - 获取字符串中所有满足正则的字符串,返回值是列表,列表中的元素是匹配到的字符串

re.finditer(正则,字符串) - 获取字符串中所有满足正则的子串,返回一个迭代器.迭代器中的元素是匹配对象

re.split(正则,字符串) - 将字符串中所有满足正则的字串作为切割点对字符串信息切割,返回一个列表,列表中是字符串

re.sub(正则,字符串1,字符串2) - 将字符串1中所有满足正则的字符串特换成字符串2

2匹配对象

re = fullmatch(r'a[123asd]b', 'asb')
print(re)
# <re.Match object; span=(0, 3), match='asb'>
1)获取匹配结果对应的字符串
a.获取整个正则匹配到的字符串

r1 = re.group( )

print(r1) # 获取匹配的对象

b.获取某个分支匹配到的结果:匹配对象.group( N )

r2 = result.group( 1 )

2)获取匹配结果在原字符串中的位置信息

r1 = re.span # (6, 9)

3)参数

1.单行匹配和多行匹配

多行匹配的时候.不能和’\n’进行匹配(默认) 参数:flags = re.M

或在正则表达式前加(?m)

re = fullmatch(r’(?m)a[123asd]b’, ‘asb’,flags = re.M)

单行的时候 . 可以和’\n’进行匹配(需要单独设置) 参数:flags = re.S

或在正则表达式前加(?s)

2.忽略大小写

设置参数:flags = re.I 或者正则表达式前加(?i)

同时忽略大小写又要单行匹配用 |

flages = re.I |re.S 或者(?is)

举报

相关推荐

0 条评论