美文网首页
day17-正则表达式

day17-正则表达式

作者: 杨海py | 来源:发表于2018-11-27 21:27 被阅读0次

1.正则基本符号

1.什么是正则表达式
正则表达式就是字符匹配工具;是由正则符号和普通字符组成,来匹配不同规律的字符串

2.python对正则表达式的支持
python中提供了一个re模块,用来支持正则表达式
fullmatch(正则表达式,字符串) -
用正则表达式去完全匹配字符串,如果匹配成功.返回一个匹配结果,失败返回None
python中的正则表达式的写法:将正则内容写在字符串中,一般这个字符串最前面会加一个r/R

"""
import re

1.普通字符

"""
普通字符在正则表达式中代表字符本身
"""

匹配一个字符串,第一个字符是a,第二个字符是b,第三个字符也是最后一个字符是'c'

re_str = r'abc'
result = re.fullmatch(re_str, 'abc')
print(result)

2. .(匹配除‘\n’外的任意字符)

"""
在正则表达式中, .出现的位置,可以匹配一个任意字符
注意:一个点只能匹配一个字符
"""

匹配一个长度是3的字符串,并且第一个字符是'a',最后一个字符是'c',中间是任意字符

re_str = r'a.c'
result = re.fullmatch(re_str, 'a\tc') # \n不能匹配
print(result)

3. \w(匹配字母数字或者下划线)

"""
在正则表达式中,\w出现的位置,可以匹配 一个 任意的字母、数字或者下划线(也可以匹配Unicode编码中除了ASCLL码剩下的部分)
"""

匹配一个长度是4的字符串,并且字符串的前一位是数字字母或者下划线,后面三位是任意字符

re_str = r'\w...'
result = re.fullmatch(re_str, '22kk')
print(result)

4.\s(匹配空白字符)

"""
空白字符包括:空格、制表符和换行符
"""

匹配一个长度是4的字符串,并且字符串前两位是数字字母或者下划线(中文),中间空白,再一个数字字母下划线(中文)

re_str = r'\w\w\s\w'
result = re.fullmatch(re_str, 'h2\n8')
print(result)

5.\d(匹配数字字符)0-9

re_str = r'\d\d..'
result = re.fullmatch(re_str, '12.\')
print(result)

6.\b(检测单词边界)

"""
注意:检测 \b 出现的位置是否是单词边界,不会对字典进行匹配。

单词边界:单词开头,单词结尾,标点符号,空白符号等,只要能够将单词区分开的符号都属于单词边界
"""
re_str = r'hello\b python'
result = re.fullmatch(re_str, 'hello python')
print(result)

7.^(检测字符串开头)

"""
在match和fullmatch中没有意义,在search,findall等中有意义
"""

匹配一个字符串前面三个字符是否是'The',后面三个是任意字符

re_str = r'^The...'
result = re.fullmatch(re_str, 'The123')
print(result)

8.$(检测字符串结尾)

"""
在match和fullmatch中没有意义,在search,findall等中有意义
"""

匹配一个字符串,只有三位,分别是'The'

re_str = r'The$'
result = re.fullmatch(re_str, 'The')
print(result)

9.

"""
\大写字母 '对应的功能是' \小写字母 功能取反
\W - 匹配非数字字母下划线
\D - 匹配非数字
\S - 匹配非空白字符
\B - 检测非单词边界
"""

10.

"""

例如:[字符集] - 匹配字符集中的任意一个字符

注意:a.一个中括号只能匹配一个字符
b.正则表达式的单个符号都代表本身例如: . $ ^ + * ? | 等
c.匹配字符的组合符号,在中括号中保持原来的功能,例如:\w, \d, \S等
"""
re_str = r'\d[abc]'
result = re.fullmatch(re_str, '1c')
print(result)

"""
2.[字符1-字符2] - 表示字符1到字符2(注意:字符1的编码值要小于字符2)
[a-z] - 表示所有的小写字母
[A-Z] - 表示所有的大写字母
[a-zA-Z] - 表示所有的字母
[0-9] - 表示数字0到9
[\u4e00-\u9fa5] - 匹配所有的中文
[字符1字符2-] - 这儿的 - 表示减号本身
"""
re_str = r'[0-9]'
result = re.fullmatch(re_str, '0')
print(result)

11.[^字符集] - 匹配不在字符集中的任意一个字符

"""
[^abc] - 匹配除了'a','b','c'以外的任意一个字符
[^a-z] - 匹配除了小写字母以外的任意一个字符
[abc^] - 匹配'a','b','c','^'中的任意一个字符
"""

2.正则控制次数

import re

1.*(匹配0次或者多次)

"""
a* - a 出现0次或者多次, '','a', 'aaa'...
\d* - 任意数字出现0次或者多次
[abc]* - 字符a,b,c出现0次或者多次
"""
print(re.fullmatch(r'a*b', 'aaaab'))

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

3. ?(匹配0次或者1次)

写一个正则表达式匹配一个整数(正整数和负整数都可以)

re_str = r'[+-][1-9][0-9]'
result = re.fullmatch(re_str, '0')
print(result)

4.{}

"""
{N} - 匹配N次,a{3} 匹配三个'a'
{M,N} - 匹配M到N次,M比N小
{,N} - 最多匹配N次
{M,} - 至少M次
"""

练习:输入密码,要求检查密码输入是否合格(密码由字母数字组成,数字不开头,6-12位)。给出提示是否正确

re_str = r'[a-zA-Z][\da-zA-Z]{5,11}'
mima = input('请输入密码:')
if re.fullmatch(re_str, mima):
print('密码输入正确!')
else:
print('密码输入错误!')

3.分支、捕获和贪婪

1.分支

"""
条件1|条件2 - 匹配条件1或者条件2
注意:正则表达式中分支也会出现短路,当条件1可以匹配,就不会使用条件2进行匹配
"""

练习:写一个正则表达式,匹配所有的数字

import re

print(re.fullmatch(r'[+-]?0[.]?\d|[+-]?[1-9]+[.]\d*', '-1.0'))

2.()捕获和分组

"""
a.分组 - 将括号的内容作为一个整体
"""
re_str = r'abc(\d{3}|[A-Z]{3})'
print(re.fullmatch(re_str, 'abc123'))
re_str = r'(\d[a-z]){3}'
print(re.fullmatch(re_str, '2d3d5f'))

"""
b.捕获
通过正则获取符合条件的子串的时候,可以再正则表达式中加括号,来实现匹配后只返回以括号中匹配到的内容为元素的列表
re.findall(正则表达式, 字符串) - 在字符串中去获取符合正则表达式条件的所有的子串,返回的是一个列表
"""
str1 = 'sdaf654da654f6a4f6af46a4f+a4f6a'
print(re.findall(r'\d+', str1))
print(re.findall(r'f(\d+)', str1))

"""
c.重复匹配
带多个分组的正则表达式,可以在分组的后面通过添加'\数字'来重复前面第几个分组中匹配到的内容

说明:\数字 - 这儿的数字代表前面第几个分组;\1代表第一个分组, \2代表第二个分组
"""
re_str = r'(\d{3})([a-z]{2})a\1\2'
print(re.fullmatch(re_str, '123qqa123qq'))

3.贪婪

"""
匹配次数后加?就是贪婪匹配:*?, +?, ??, {}? - 表示尽可能少的重复
"""
re_str = 'a.+?b'
str1 = 'xxxahdbsdffagvbsx'
print(re.findall(re_str, str1))

4.转义符号

"""
在正则表达式中可以在有特殊意义或者特殊功能的符号前加‘\’来取消其特殊的功能
\w - 代表两个字符,分别是'','w'
+ - 代表'+'字符
[],(),{}表示字符的时候,前面也要加
...
注意:在中括号中,\加\表示\本身,在最前面加\表示本身,-在两个字符之间加\表示-本身
"""
re_str = r'\w-\d{3}'
print(re.fullmatch(re_str, '\w-232'))

反斜杠个数除以2,得到的结果如果有小数部分则整数部分加1

print('\\\w-123')

4.re模块

import re

1.complie

"""
complie(正则表达式) - 将正则表达式转换成正则表达式对象
转换成对象后可以通过对象调用对象方法

"""
re_str = '\d{3}'
re_obj = re.compile(re_str)

调用模块中的函数

print(re.fullmatch(re_str, '234'))

调用对象方法

print(re_obj.fullmatch('234'))

2.match和fullmatch

"""
a.fullmatch(正则表达式, 字符串) - 完全匹配,从字符串开头匹配到字符串结束
b.match(正则表达式, 字符串) - 不完全匹配,只匹配到字符串开头
"""
re_str = r'\d[A-Z]{2}'
result = re.fullmatch(re_str, '2HK')
print(result)

re_str = r'\d([A-Z]){2}'
result1 = re.match(re_str, '8KLdfa')
print(result1)

匹配对象

"""
1.span - 匹配到的内容的范围,(开始下标,结束下标)
匹配对象.span() - 获取整个正则表达式匹配到的范围
匹配对象.span(n) - 获取正则表达式中第n个分组匹配到的范围(前提是有分组)
"""
print(result1.span())
print(result1.span(1))

"""
2.start和end - 获取匹配结果的开始下标和结束下标
匹配对象.start()/匹配对象.end() - 获取整个正则表达式匹配到的开始下标/结束下标
匹配对象.start(n)/匹配对象.end(n) - 取正则表达式中第n个分组匹配到的开始下标/结束下标
"""
print(result1.start(), result1.end())
print(result1.start(1), result1.end(1))

"""
3.group - 获取匹配到的内容
匹配对象.group() - 获取整个正则表达式匹配到的内容
匹配对象.group(n)- 获取正则表达式第n个分组匹配到的范围
"""
print(result1.group())
print(result1.group(1))

"""
4.string - 获取用来匹配的原字符串
匹配对象.string
"""
print(result1.string)

3.search

"""
search(正则表达式, 字符串) - 匹配字符串中第一个满足正则表达式的子串,如果匹配成功返回匹配对象,否则返回None

"""
str1 = 'abc123fsd156fs1f5sd1'
result1 = re.search(r'\d{3}[a-z]{2}', str1)
print(result1)

4.split

"""
split(正则表达式, 字符串) - 在字符串中按照满足正则表达式条件的子串对字符串进行切割
返回是一个列表
"""
str1 = 'ab+1da35sf13_a1f35sd1g3a'
result = re.split(r'\d+', str1)
print(result )

5.sub

"""
sub(正则表达式, 新子串, 字符串) - 用新子串替换字符串中满足正则表达式的子串,返回一个替换后的字符串
"""

6.findall

"""
findall(正则表达式, 字符串) - 在字符串中获取满足正则表达式的所有的字符,返回一个列表,列表元素是字符串

注意:如果正则表达式中有一个分组,结果是列表中只取这个分组匹配到的结果
如果这个正则表达式中分组个数大于1,结果就是一个列表,列表中的元素就是元组,元组中是每个分组匹配到内容
"""

7.finditer

"""
re.finditer(正则表达式, 字符串) - 获取字符串中满足正则表达式的内容,返回的是一个迭代器,迭代器中的元素是匹配对象
"""

相关文章

  • day17-正则表达式

    一、正则表达式: from re import fullmatch, search, findall 正则表达式就...

  • day17-正则表达式

    正则表达式 正则表达式使用匹配或者秒速字符串的工具。用处:a.判断字符串是否满足某个条件--判断输入的字符串是否是...

  • Day17-正则表达式

    一、正则表达式语法 正则表达式是用匹配或者描述字符串的工具。 用处: a.判断字符串是否满足某个条件---判断输入...

  • day17-正则表达式

    1.正则基本符号 1.什么是正则表达式正则表达式就是字符匹配工具;是由正则符号和普通字符组成,来匹配不同规律的字符...

  • day17-正则表达式

    一.正则基本符号 什么是正则表达式正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律的字符串...

  • day17-正则表达式

    01-基本符号 1.什么是正则 正则表达式就是一个字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律的字符...

  • day17-正则表达式

    01-正则表达式 1、正则表达式就是用来检测字符串是否满足某种规则的工具。2、python对正则表达式的支持,提供...

  • Day17-正则表达式

    from re import fullmatch, search,findall 正则表达式就是用来检测字符串是否...

  • day17-正则表达式

    17.1 正则基本符号 1.什么是正则表达式 正则表达式就是字符匹配的工具,用来做正则匹配;是由正则符号和普通字符...

  • day17-正则表达式

    正则符号 1.什么是正则 正则是字符串匹配的一种工具,拥有自己的语法。语法中主要包含各种符号的使用 2.正则语法 ...

网友评论

      本文标题:day17-正则表达式

      本文链接:https://www.haomeiwen.com/subject/bwnnqqtx.html