python基础(正则表达式)
来源:互联网 发布:java能调用api 编辑:程序博客网 时间:2024/06/05 17:15
正则表达式用于搜索、替换和解析字符串。正则表达式遵循一定的语法规则,使用非常灵活,功能强大。使用正则表达式编写一些逻辑验证非常方便,例如电子邮件地址格式的验证。python提供了re模块实现正则表达式的验证。
1.简介
正则表达式是用于文本匹配的工具,它在源字符串中查找与给定的正则表达式相匹配的部分,一个正则表达式是由字母、数字和特殊字符(括号、星号、问号)组成,正则表达式中有许多特殊的字符,这些特殊字符是构成正则表达式的要素。
正则表达式中的特殊字符:
^ —–正则表达式的开始符号
$ —–正则表达式的结束符号
\w ——匹配字母、数字、下划线
\W —–匹配不是字母、数字、下划线的字符
\s —–匹配空白字符
\S —–匹配不是空白的字符
\d —-匹配数字
\D —-匹配非数字的字符
\b —-匹配单词的开始和结束
\B —-匹配不是单词开始和结束
. —-匹配任意字符,包括汉字
如果要匹配电话号码,需要形如“\d\d\d\d-\d\d\d\d\d\d\d”这样的正则表达式,其中出现了11次“\d”,表达方式繁琐,正则表达式提供了对表达式的一部分进行重复处理的功能。
正则表达式中的常用限定符:
* —–匹配零次或多次
+ —–匹配一次或多次
? —–匹配一次或零次
{m} —-重复m次
{m,n} —重复m到n次,其中n可以省略
利用{}可以控制字符重复的次数,例如\d{1,4}表示1~3位数字,前面提到的电话号码采用如下的正则表达式:
\d{3}-\d{8}|\d{4}-\d{7}
如果要对正则表达式进行嵌套,就需要使用分组“()”,例如,对3位数字重复3次,可以使用如下的正则表达式表示:
(\d\d\d){2}
默认情况下,正则表达式将匹配最长的字符串作为结果,可以通过在限定符后面添加“?”的方式,获取最短的匹配结果,例如,对字符“a”到字符“c”之间的字符进行匹配。
2.使用re模块处理正则表达式
python的re模块具有正则表达式匹配的功能,re模块提供了一些根据正则表达式进行查找、替换、分隔字符串的函数,这些函数使用一个正则表达式作为第一个参数。
re模块的常用函数:
findall(pattern,string,flags=0):根据pattern在string中匹配字符串。如果匹配成功,返回包含匹配结果的结果列表,否则,返回空列表。
sub(pattern,repl,string,count=0):根据指定的正则表达式,替换源字符串中的 子串。pattern是一个正则表达式,repl是用于替换的字符串,string是源字符串,如果count等于0,则返回string中匹配的所有结果,如果,count大于0,则返回前count个匹配结果。
match(pattern,string,flags=0):根据pattern从string的开头匹配字符串,只返回第一次匹配成功的对象,否则,返回None
search(pattern,string,flags=0):根据pattern从string中匹配字符串,只返回第一次匹配成功的对象,否则,返回None
compile(pattern,flags=0)编译正则表达式pattern,返回一个pattern对象。
escape(pattern):匹配字符串中的特殊字符,如*、+、?等
练习1:
import re#^与$的使用s = "HELLO WORLD"print(re.findall(r"^hello",s)) #默认区分大小写的从字符串开头匹配以“hello”开始的字符串print(re.findall(r"hello",s,re.I)) #re.I为辅助参数,表示忽略大小写,不区分大小写的从字符串开头匹配以“hello”开始的字符串print(re.findall(r"woRLD$",s)) #默认区分大小写的从字符串尾部匹配以“hello”开始的字符串print(re.findall(r"woRLD$",s,re.I)) #不区分大小写的从字符串尾部匹配以“hello”开始的字符串print(re.findall(r"\b\w+\b",s)) #匹配每个英文单词s = "hello world"print(re.sub("hello","hi",s))print(re.sub("hello","hi",s[-4:])) #在切片是[-4:]范围内替换“hello”,即在字符串“orld”中替换“hello”print(re.sub("world","China",s[-5:])) #在分片s[-5:]范围内替换“world”,即把字符串“world”替换为“China”s = "你好 WORLD2"print("匹配字母数字:"+re.sub(r"\w","hi",s))print("替换次数:"+str(re.subn(r"\w","hi",s)[1]))print("匹配任意字符:"+re.sub(r".","hi",s))print("替换次数:"+str(re.subn(r".","hi",s)[1]))
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/re_sign.py[]['HELLO'][]['WORLD']['HELLO', 'WORLD']hi worldorldChina匹配字母数字:hihi hihihihihihi替换次数:8匹配任意字符:hihihihihihihihihi替换次数:9
练习2:
import retel1 = "0791-1234567"print(re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}",tel1)) #匹配区号为3位的8位数电话号码或区号为4为的7位数电话号码,区号和电话号码之间用—连接tel2 = "010-12345678"print(re.findall(r"\d{3}-\d{8}|\d{4}-\d{7}",tel2))tel3 = "(010)12345678"print(re.findall(r"[\( ]?\d{3}[\]-]?\d{8}|[\( ]?\d{4}[\]-]?\d{7}",tel3)) #匹配区号为3位的8位数电话号码或区号为4为的7位数电话号码,区号和电话号码之间用—连接,或区号两侧加圆括号
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/re_number.py['0791-1234567']['010-12345678']
练习3:
import res = "1abc23def45"p = re.compile(r"\d+") #返回一个正则表达式对象P,匹配变量s中的数字print(p.findall(s)) #调用p中的findall()方法,匹配的结果存放在列表中print(p.pattern) #输出当前使用的正则表达式p = re.compile(r"(abc)\1") #定义一个分组"(abc)",在后面使用“1”再次调用该分组,compile()返回一个包含2个分组的正则表达式对象Pm = p.match("abcabcabc") #对字符串进行搜索,返回一个match对象mprint(m.group(0)) #匹配0号组print(m.group(1)) #匹配1号组print(m.group()) #默认返回0号组p = re.compile(r"(?P<one>)abc(?P=one)") #给分组命名one表示分组的名称,“(?P=one)调用分组one,相当于“\1””m = p.search("abcabcabc")print(m.group("one"))print(m.groupdict().keys()) #获取正则表达式中分组的名称print(m.groupdict().values())#获取正则表达式中分组的内容print(m.re.pattern) #获取当前使用的正则表达式
运行结果:
D:\Python36\python.exe E:/demo_py/python/char_6/re.compiler.py['1', '23', '45']\d+abcabcabcabcabcdict_keys(['one'])dict_values([''])(?P<one>)abc(?P=one)
- Python 正则表达式(基础)
- python基础(正则表达式)
- python正则表达式(基础)
- Python基础-正则表达式
- python基础------正则表达式
- Python正则表达式基础
- Python正则表达式基础
- python基础------正则表达式
- python 正则表达式基础
- Python基础-正则表达式
- 正则表达式:python基础修行(2)
- Python篇----正则表达式语法(基础)
- Python爬虫基础-5(正则表达式)
- python基础-正则表达式、python使用正则
- Python中的正则表达式基础
- python基础(5)--正则表达式
- Python基础:28正则表达式
- Python基础(十)正则表达式
- SpringBoot--整合Mybatis和Redis
- TensorFlow利用saver保存和提取参数
- 小程序合集
- proxy_pass_request_headers off的坑
- 更于午夜,SpringBoot返回页面404,毁我睡眠
- python基础(正则表达式)
- systemtap定位内核bug
- 大数相加
- maven settings.xml
- 关于JavaScript闭包学习
- (2)Spring IoC的第一个例子
- AI转型学习计划
- Android Studio遇到非法字符错误时的解决步骤
- 常用SQL(一)