day17-总结

re中主要通过正则相关的方法

import re

1.什么是正则

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

2.正则语法

re.fullmatch(正则表达式,字符串) - 检查字符串是否完全符合正则表达规则(完全匹配); 匹配成功,返回匹配对象,匹配失败,返回None

正则表达式 - python中的正则表达式是写在引号中(可以是单引号也可以是双引号),但是一般情况下会在引号前面加r - (r'正则表达式')

(1)普通字符 - 除了正则中有特殊功能和特殊意义以外的其他所有字符

例如:a, b, c, 1, 你,......
普通字符在正则中表示字符本身

表示一个字符串有3个字符,每个字符分别是a, b, c
re_str = r'abc'
result = re.fullmatch(re_str, 'abc')
print(result)

(2) . - 匹配任意字符

正则中出现.的位置可以匹配任意字符,一个.只能匹配一个任意字符

# 匹配一个长度是3的字符串,字符串开头是a,结尾是b,中间一个任意字符
re_str = r'a.b'
result = re.fullmatch(re_str, 'a0b')
print(result)

(3)\w - 匹配数字,字母或者下划线(只针对ASCII码有效)

一个\w只能匹配一个字符
注意:Unicode码中除了ASCII码表以外的其他字符都能匹配

re_str = r'a\wb.'
result = re.fullmatch(re_str, 'a9b9')
print(result)

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

空白:空格,回车/换行,制表符

result = re.fullmatch(r'abc\s123', 'abc\t123')
print(result)

(5) \d - 匹配一个数字字符

result = re.fullmatch(r'a\d\db', 'a99b')
print(result)

(6) \大写字母 - 匹配非\小写字母匹配到的内容

\W - 匹配非数字,字母,下划线
\S - 匹配非空白字符
\D - 匹配非数字字符

(7) [] - 匹配字符集

a.普通用法:
[字符集] - 匹配字符集中的任意一个字符
例:[az1+] - 匹配一个字符是a或者z或1或+
[\dabc] - 匹配一个字符是数字或者a或者b或者c

b.表示范围的字符集: [字符1-字符2] - 从字符1到字符2中的任意一个字符
注意:字符2的编码值必须大于字符1
[5-9] - 匹配数字字符5到9的一个
[a-z] - 匹配小写字母a到z的一个
[a-zA-Z] - 匹配任意一个字母
[a-zA-Z\d_] - 匹配字母数字下划线

c.反向选中:[^字符集] - 选中除了字符集中以外的其他的任意一个字符

print(re.fullmatch(r'[a-zA-Z\d_][A-Z]abc', '9Rabc'))

一个匹配符号必须对应一个具体的字符;检测符号只是对符号所在的位置进行检查,不会影响字符串长度

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

单词边界:一个可以将两个单词区分开的符号都是单词边界,例如:单词开头,单词结尾,空白标点符号等

匹配一个字符串是'howare',然后检查w的后面是否是单词边界

print(re.fullmatch(r'how\b are', 'how are'))

(2) ^ - 检查 ^ 所在的位置是否是字符串开头

print(re.fullmatch(r'^abc', 'abc'))  # 等同于print(re.fullmatch(r'abc', 'abc'))

(3) - 检查所在的位置是否是字符串结尾

print(re.fullmatch(r'abc$', 'abc'))  # 等同于print(re.fullmatch(r'abc', 'abc'))

1.匹配次数

(1) * - 匹配0次或多次

字符* - 前的字符出现0次或多次
例:r'a
' - '','a','aa','aaa',...
r'\d' - '','1','2','112','22434'
r'[abc]
' - '','a','ab','abbc','aaccbb'

print(re.fullmatch(r'a\d*b', 'a975935835b'))

(2) + -- 匹配1次或多次

print(re.fullmatch(r'a\db', 'ab'))  # None

(3) ? - 匹配0次或1次

print(re.fullmatch(r'[+-]?\d+', '293'))

(4) {}

{N} - 匹配N次
{M, N} - 匹配M到N次
{M,} - 匹配至少M次
{,N} - 最多匹配N次

print(re.fullmatch(r'a{3}123', 'aaa123'))
print(re.fullmatch(r'a{2,5}123', 'aaa123'))
print(re.fullmatch(r'\d{3,}', '394292944242'))
print(re.fullmatch(r'\d{,5}', ''))

2.贪婪和非贪婪

,+,?,{}对应匹配次数是贪婪的;在匹配次数不确定的时候才有贪婪和非贪婪的区分
在匹配次数不确定的符号后面加?问号,就会变为非贪婪:
?, +?, ??, {M,N}?, {M,}?, {,N}?

贪婪:在匹配成功的前提下,尽可能多的匹配
非贪婪:在匹配成功的前提下,尽可能少的匹配

3.| - 分之

正则表达式1 | 正则表达式2

4. () - 分组

1.分组 - 将正则中的一部分看做一个整体进行操作
2.重复 - 添加分组后,可以在分组的后面通过\M来重复前面第M个分组匹配到的结果

print(re.fullmatch(r'(\d+)abc\1', '100abc100'))

5.转义符号 - 在正则符号前加 \ ,让符号功能消失

正则中的转义符号和字符串的转义字符是两回事

独立的特殊符号放在[]中特殊意义会自动消失,但是除了:-,[]

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

1.创建正则对象

compile(正则表达式) - 根据正则表达式创建正则对象

2.匹配

fullmatch(正则表达式,字符串) - 让整个字符串与正则表达式进行匹配
match(正则表达式,字符串) - 匹配字符串开头

返回值:匹配成功是匹配结果对象,匹配失败是None

result = re.match(r'(\d{3})([a-z]{2})', '945sdfjsfk-----+++')
print(result)

匹配结果

(1)匹配结果对应的字符串

匹配对象.group() - 获取整个正则匹配到的结果
匹配对象.group(N) - 获取第N个分组匹配到的结果

print(result.group())
print(result.group(1))  # 取第一个分组的结果
print(result.group(2))  # 取第2个分组的结果

(2)获取匹配位置

匹配对象.span(group=0)
匹配对象.start(group=0)
匹配对象.end(group=0)

print(result.span(1))  # 取第一个分组的位置
print(result.start(1))
print(result.end(1))

(3)获取原字符串

print(result.string)

3.查找

search(正则表达式,字符串) - 匹配出字符串中第一个满足正则表达式的子串,结果是匹配对象

findall(正则表达式,字符串) - 获取字符串中所有满足正则表达式的子串,结果是列表,列表中的元素是字符串

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

result = re.search(r'\d{3}', 'sfsfjsf,43,fsfsfsf3435,dgsg5433')
print(result)
result = re.findall(r'\d{3}', 'sfsfjsf,43,fsfsfsf3435,dgsg5433')
print(result)

result = re.findall(r'(\d{3})a', 'sfsfjsf,43,fsfsfsf3435a,dgsg543a3')
print(result)

result = re.finditer(r'(\d{3})a', 'sfsfjsf,43,fsfsfsf3435a,dgsg543a3')
print(result)
print(next(result))

4.切割

split(正则表达式,字符串) - 按照满足正则表达式的子串对字符串进行切割,返回列表

str1 = 'aaabbbsssjfsfjjdjkkdjjkfi9dsfs99fsf83rsf743jdf'
print(re.split(r'\d+', str1))

5.替换

sub(正则表达式,字符串1,字符串2,替换次数=0) - 将字符串2中满足正则表达式的子串替换成字符串1,替换次数为0的时候全部替换

str1 = 'aaabbbsssjfsfjjdjkkdjjkfi9dsfs99fsf83rsf743jdf'
new_str = re.sub(r'\d+', '+', str1)
print(new_str)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 01.正则基本符号 1.什么是正则表达式 正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律...
    Gary134阅读 3,486评论 0 0
  • 第一节:用socket创建服务器和客户端 1.创建套接字对象 2.绑定地址 3.监听 4.让服务器一直运算 客户端...
    觉醒_009f阅读 1,014评论 0 0
  • 主要提供正则相关的方法 import re 1.什么是正则 '''正则是字符串匹配的一种工具,拥有自己的语法。语法...
    SheeranED阅读 858评论 0 0
  • 1.什么是正则 正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律的字符串 2.python...
    年華盡耗_c24e阅读 1,313评论 0 0
  • import re'''正则表达式就是做字符串匹配的一种工具,很多语言都支持正则语法,正则语法是通用的。 pyth...
    小逗比的奋斗史阅读 3,294评论 0 0