01.16 re模块

2019-01-16  本文已影响0人  xxxQinli

1. compile(正则表达式)

将正则表达式转换成正则对象


 re\_object = re.compile(r'\\d{3}')

 re\_object.fullmatch('432')

2. fullmatch(正则表达式, 字符串)

让字符串和正则表达式完全匹配,匹配成功返回匹配对象,匹配失败返回None

 result = re.fullmatch(r'(\\d{3})=([a-z]+)', '342=sjaks')

 print(result)
 print('====span====')

 print(result.span()) \# 获取整个正则表达式匹配到的内容的范围

 \# start, end = result.span()

 \# print(start, end)

 print(result.span(1)) \# 获取正则表达式中第一个分组匹配到的内容的范围

 print(result.span(2)) \# 获取正则表达式中第二个分组匹配到的内容的范围
 print('====start名,end====')

 print(result.start(), result.end())

 print(result.start(1), result.start(2))
 print(result.group()) \# 获取整个正则匹配到的字符串

 print(result.group(1)) \# 获取第一个分组匹配到的字符串

 print(result.group(2)) \# 获取第二个分组匹配到的字符串

 print(result.groups()) \# 同时获取所有分组匹配到的字符串(结果是元祖)
 print(result.string)

3.match(正则表达式,字符串)

让字符串的开头和正则表达式进行匹配,匹配成功结果是匹配对象,否则是None

 print(re.match(r'\\D\\d', 's3skjkjks'))

4.search(正则表达式,字符串)

在字符串中去匹配出第一个符合正则表达式的子串, 匹配成功结果是匹配对象,否则是None

 print(re.search(r'[\\u4e00-\\u9fa5]{3}', 'hsj后视ss023你好吗,skss上的30s'))

5.split(正则表达式,字符串)

将字符串按照满足正则要求的子串进行切割(返回值是列表)

 print(re.split(r'\\d+', 'asj38jkas0093kjsj78kajs89==asdfj3jkkss'))

6.sub(正则表达式,字符串1, 字符串2)

将字符串2中能够和正则表达式匹配的子串替换成字符串1,产生一个新的字符串

print(re.sub(r'\d+', '*', 'jsj93jksj93j5a45s3s是看得见'))

print(re.sub(r'傻逼|[傻艹草操]', '*', '你是傻逼吗?艹!'))

7.findall(正则表达式, 字符串)

在字符串中获取满足正则表达式的所有的子串(结果是列表)

 # 注意: 如果正则表达式中有分组,直接获取到的是分组中匹配到的内容; 如果有多个分组列表中的元素是元祖

 print(re.findall(r'\\d+[a-z]', 'sjh83bkss93ksjhf9922'))

 print(re.findall(r'(\\d+)[a-z]', 'sjh83bkss93=sjhf9922'))

 print(re.findall(r'abc(\\d{2}|[A-Z]{2})', '=-aaabc73kkjabcKJL=3'))

8.finditer(正则表达式, 字符串)

在字符串中获取满足正则表达式的所有的子串(结果是迭代器,元素是匹配对象)

 result = re.finditer(r'(\\d+)[a-z]', 'sj8khk83jks数据310sj=sd')

 print(result)

 print(next(result).group())

9.re.I

忽略大小写

 # 匹配的约束条件是放在函数的flags参数中的

 print(re.fullmatch(r'[a-z]{2}', 'SA', re.I))

 # 练习

 """

 验证输入用户名和QQ号是否有效并给出对应的提示信息

 要求:

 用户名必须由字母、数字或下划线构成且长度在6~20个字符之间

 QQ号是5~12的数字且首位不能为0

 """

 re\_str1 = r'[a-zA-Z\\d\_]{6,20}'

 re\_str2 = r'[1-9]\\d{4,11}'
 
import re

# 贪婪
print(re.search(r'\d+', 'abchs3482==sdd')) # 贪婪 return <re.Match object; span=(5, 9), match='3482'>
print(re.search(r'\d+?', 'abchs3482==sdd')) # 非贪婪 return <re.Match object; span=(5, 6), match='3'>
print(re.search(r'"name":".*?",', '====,"name":"yuting","age":18, "爱好":"编程",....')) # 非贪婪 retuen <re.Match object; span=(5, 21), match='"name":"yuting",'>

re.compile #创建一个partten对象,对象可以直接用正则方法
re_object = re.compile(r'\d\d_')
print(re_object.fullmatch('22_'))

"""
print(result.group())   # 获取整个正则匹配到的字符串,整个
print(result.group(1))  # 获取第一个分组匹配到的字符串,分组
print(result.group(2))  # 获取第二个分组匹配到的字符串,分组
print(result.groups())  # 同时获取所有分组匹配到的字符串(结果是元祖),分组元组
"""

re.fullmatch # partten与字符串必须完全匹配,不能字符串中包含partten return <re.Match object; span=(0, 1), match='3'> 有group() span() start() end() string
print(re.fullmatch(r'\d*?', '234')) 

re.match # 从开头开始匹配,return <re.Match object; span=(0, 1), match='2'> 有group() span() start() end() string
print(re.match(r'\d{1,3}', '2sf').span())

re.sub # 将匹配的到的替换, return替换后的字符串
print(re.sub(r'\d\s_', '*', 'asdas3 _asd5 _asd'))

re.findall # 将所有匹配到的提出来成为一个列表, return匹配成功的列表
# 若匹配到了的里面有分组,分组会形成一个元组,而没在分组里的则不会显示出来
result = re.findall(r'\'\w+\':\s*\'*\w+\'*', "{'name': 'qinli' ,'age': 234}")
print(result)

re.finditer # 产生迭代器,next()后返回 <re.Match object; span=(1, 16), match="'name': 'qinli'"> 有group() span() start() end() string
# group()是每组的内容冒号隔开,groups()是所有内容的元组
result = re.finditer(r'(\'\w+\'):(\s*\'*\w+\'*)', "{'name': 'qinli' ,'age': 234}")
print(next(result).string)
print(next(result).group())

re.split # 将匹配到的当作分隔处隔开,return分隔后的列表
# 若开头和结尾匹配到,会在开头和结尾产生一个
print(re.split(r'[^a-z0-9A-Z]+', "{'name': 'qinli' ,'age': 234}"))

re.search # 只找得第一个匹配的,return <re.Match object; span=(2, 7), match="name'"> 有group() span() start() end() string
result = re.search(r'([a-z]+)\'', "{'name': 'qinli ,'age': 234}")
print(result.group(), result.groups(), result.group(1))

re.I # 不区分大小写
print(re.fullmatch(r'[a-z]{2}', 'SA', re.I))
上一篇下一篇

猜你喜欢

热点阅读