Python编程:re正则库基本使用

举报
彭世瑜 发表于 2021/08/14 01:22:25 2021/08/14
【摘要】 之前的文章: Python编程:re正则库 正则字符集 # 字符集 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空白字符,等价于[\n\t\r\f] \S 匹配任意非空字符 \d 匹配任意数字,等价于[0-9] \D 匹配任意非数字 \A 匹配字符串开始 \Z 匹配字符串结束,如果是换行,只匹配到换行前的结束字符串 \z 匹配...

之前的文章:
Python编程:re正则库

正则字符集

# 字符集

\w 匹配字母数字及下划线
\W 匹配非字母数字及下划线
\s 匹配任意空白字符,等价于[\n\t\r\f]
\S 匹配任意非空字符
\d 匹配任意数字,等价于[0-9]
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是换行,只匹配到换行前的结束字符串
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
[...] 匹配一组字符,单独列出,[abc]匹配a,b或c
[^...] 匹配不在其中的字符

# 数量控制

a|b  匹配a或b
^  匹配字符串的开头
$  匹配字符串的末尾
.  匹配任意字符,除了换行符, 指定re.DOTALL 匹配包括换行符的任意字符
*  零个或多个表达式
+  一个或多个表达式
?  零个或一个表达式,非贪婪匹配
{n} 匹配n个表达式
{n, m}匹配n~m次表达式,贪婪匹配
()  匹配括号内的表达式,表示组

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

代码实例


import re

# match从头开始匹配
# 常规匹配
content = "fsadf5666asd"
ret = re.match("\w+", content)
print(len(content))
print(ret)
print(ret.group())
print(ret.span())
"""
12
<_sre.SRE_Match object; span=(0, 12), match='fsadf5666asd'>
fsadf5666asd
(0, 12)
"""

# 泛匹配
ret = re.match(".*", content)
print(ret)
# <_sre.SRE_Match object; span=(0, 8), match='fsadfasd'>

# 目标匹配
ret = re.match("[a-z]+(\d+)", content)
print(ret)
print(ret.group())
print(ret.group(0))
print(ret.group(1))
"""
<_sre.SRE_Match object; span=(0, 9), match='fsadf5666'>
fsadf5666
fsadf5666
5666
"""

# 贪婪匹配
ret =  re.match(".*(\d+)", content)
print(ret)
print(ret.group(0))
print(ret.group(1))
"""
<_sre.SRE_Match object; span=(0, 9), match='fsadf5666'>
fsadf5666
6
"""

# 非贪婪匹配
ret =  re.match(".*?(\d+)", content)
print(ret)
print(ret.group(0))
print(ret.group(1))
"""
<_sre.SRE_Match object; span=(0, 9), match='fsadf5666'>
fsadf5666
5666
"""

# 匹配模式
content = """sadfasd34345sdfa
sdfasdf"""
# 匹配换行符
ret =  re.match(".*?(\d+).*", content, re.S)
print(ret)
print(ret.group(1))
"""
<_sre.SRE_Match object; span=(0, 24), match='sadfasd34345sdfa\nsdfasdf'>
34345
"""

# 转义
content = "sdfasdf$55.334"
# 匹配换行符
ret =  re.match(".*?(\$\d+\.\d+)", content, re.S)
print(ret)
print(ret.group(1))
"""
<_sre.SRE_Match object; span=(0, 14), match='sdfasdf$55.334'>
$55.334
"""

# 总结:
# 尽量使用泛匹配,使用括号得到匹配目标,
# 尽量使用非贪婪模式,有换行符就用re.S

# search扫描整个字符串
# 能用search就不用match
content = "fsadf5666asd"
ret = re.match("\d+", content)
print(ret)
ret = re.search("\d+", content)
print(ret)
"""
None
<_sre.SRE_Match object; span=(5, 9), match='5666'>
"""

# findall 找到所有
content = "fsadf5666asd234"
ret = re.findall("\d+", content)
print(ret)
# ['5666', '234']


# sub 替换字符串
content = "fsadf5666asd234"
ret = re.sub("\d+", "", content)
print(ret)
# fsadfasd

# compile 编译成正则对象,便于复用
content = "fsadf5666asd234"
pattern = re.compile("\d+")
ret = pattern.findall(content)
print(ret)
# ['5666', '234']



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118

r'' 一般用在正则表达式中,称为原始字符串,

作用
将Python语法中的反斜杠转义给取消,将其设置成为一个普通的字符串

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/80114923

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。