python 正则表达式 (re模块)
2018-11-20 03:25:22来源:博客园 阅读 ()
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法
re.match(pattern, string, flags=0)
参数说明:
pattern 要匹配的正则表达式
string 要匹配的字符串
flags 标志位,用于控制正则表达式的匹配方式,例如,是否要区分大小写等等,参考正则表达式修饰符
实例
import re print(re.match('abc','abcdefghi').span()) #在起始位置匹配 print(re.match('ghi','abcdefghi')) #不在起始位置匹配
运行结果
(0, 3)
None
re.search方法
re.search 扫描整个字符串并返回第一个成功匹配。
函数语法
re.search(pattern, string, flags=0)
实例
import re print(re.search('abc','abcdefghi').span()) #在起始位置匹配 print(re.search('ghi','abcdefghi').span()) #不在起始位置匹配
运行结果
(0, 3) (6, 9)
re.match与re.search的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
检索和替换
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
语法
re.sub(pattern, repl, string, count=0, flags=0)
参数说明
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
实例
import re phone_number='3-123-456-789'
#将'-'替换成'@' number=re.sub('-','@',phone_number) print('修改后的电话号码',number)
运行结果
修改后的电话号码 3@123@456@789
repl参数是一个函数时
实例
import re
#将匹配到的数字乘3 def double(a): c=int(a.group('c')) return str(3*c) print(re.sub('(?P<c>\d+)',double,'asd-645-sa-4-da-87-ad-6'))
运行结果
asd-1935-sa-12-da-261-ad-18
compile函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法格式为:
re.compile(pattern, [flags])
实例
import re pattern = re.compile(r'\d+') a = pattern.match('one12twothree34four',3,10) #从 1 开始查找 print(f'{a.group(),a.span()}') b = pattern.search('one12twothree34four', 5, 15)#从 t 开始搜索 print(f'{b.group(),b.span()}')
运行结果
('12', (3, 5)) ('34', (13, 15))
findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
语法格式
findall(pattern, string, flags=0)
实例
import re reg='\d+' print(re.findall(reg,'1a2b3c4d5e6f7g'))
运行结果
['1', '2', '3', '4', '5', '6', '7']
split
split 方法按照能够匹配的子串将字符串分割后返回列表
语法格式
re.split(pattern, string, maxsplit, flags)
参数
maxsplite | 分割次数,maxsplit=1即分割一次,默认为0,不限制次数 |
实例
import re Str='1a2b3c4d5e6d7f' print(re.split('[a-z]',Str))
运行结果
['1', '2', '3', '4', '5', '6', '7', '']
正则表达式对象
re.MatchObject
group() 返回被 RE 匹配的字符串。
- start() 返回匹配开始的位置
- end() 返回匹配结束的位置
- span() 返回一个元组包含匹配 (开始,结束) 的位置
正则表达式修饰符 (flags)
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
正则表达式常用字符含义
普通字符 | 匹配自身 |
. | 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符包括换行 |
^ | 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) |
$ | 匹配字符结尾或e.search(r"^a","\nabc\neee",flags=re.MULTILINE).group()也可以 |
* | 匹配*号前的字符0次或多次re.findall("ab*","cabb3abcbbac") 结果为['abb', 'ab', 'a'] |
+ | 匹配前一个字符1次或多次re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb'] |
? | 匹配前一个字符1次或0次 |
{m} | 匹配前一个字符m次 |
{n,m} | 匹配前一个字符n到m次re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb'] |
| | 匹配|左或|右的字符re.search("abc|ABC","ABCBabcCD").group() 结果'ABC' |
(...) | 分组匹配re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c |
[...] | 字符集,对应位置可以是字符集中的任意字符,字符集中的字符可以逐个给出也可以给出范围,如[a-c]即[abc],[^abc]b表示取反即非abc |
\A | 只从字符开头匹配re.search("\Aabc","alexabc") 是匹配不到的 |
\Z | 匹配字符结尾同$ |
\d | 匹配数字0-9 |
\w | 匹配[A-Za-z0-9] |
\D | 匹配非数字 |
\W | 匹配非[A-Za-z0-9] |
\s | 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果为 '\t' |
反斜杠作用:
- 反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
- 反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
- 引用序号对应的字组所匹配的字符串。
萌新第一次发博客,坐等大佬点评
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash