- 什么是正则表达式?
- 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a-z或者特殊字符(*,+?等))
- 正则表达式使用单个字符串来描述,匹配某个句法规则的字符串
- 注:因为使用麻烦,所以一般由其他的包进行操作,如果必须要使用,可以通过help查看如何使用
- 常用的正则标识
单字符:
.:除换行以外所有字符
[]:[aoe][a-w]匹配集合中任意一个字符
\d:数字[0-9]
\D:非数字
\w:数字,字母,下划线,中文
\W:非\w
\s:所有的空白字符,包括空格,制表符,换页符等等.等价于[\f \n \r \t \v]
\S:非空白
数量修饰:
*:任意多次 >= 0
+:至少1次 >= 1
?:可有可无 0次或者1次
{m}:固定m次
{m,}:至少m次
{m,n}:m-n次
边界:(可以用来判断是否符合规范,注册邮箱时,@163.com是否加上等等)
$:以某某结尾
^:以某某开头
分组:
(ab)
贪婪模式:.*
#提取出字符串中所有符合条件的字符串
非贪婪(惰性)模式: .*?
re.S:单行匹配(处理回车)
re.sub(正则表达式,替换内容,字符串)
- 正则在python中的使用
- 基于re模块进行正则匹配操作
- 主要使用re模块中的findall进行指定规则的匹配
- findall(str,rule)
- str表示即将进行匹配的原始字符串数据
- rule表示指定规则的正则表达式
- findall返回的是列表,列表中存储匹配到的指定内容
#练习
import re
#提取出 hello
# key="<html><h1>hello world<h1></html>"
# ex = "hello"
# result = re.findall(ex,key)[0]
# print(result)
#提取出hello world
# key="<html><h1>hello world<h1></html>"
# ex = "<h1>(,*)<>h1" #可以直接将分组结果返回
# print(re.findall(ex,key))
#提取170
# string = "身高为170"
# ex = "\d+"
# print(re.findall(ex,string))
#提取所有的数字
# string = "我喜欢身高为155的女孩190"
# ex = "\d+"
# print(re.findall(ex,string))
#只想取出第一个数字(取数字的过程中无法作用非贪婪模式)
# string = "我喜欢身高为155的女孩190"
# ex = "为(\d+)"
# print(re.findall(ex,string))
# 提取出http://和https://
# key = "http://www.baidu.com and https://boob.com"
# ex = "http.?://"
# print(re.findall(ex,key))
# 提取出hello
# key = "lalalahellohaha"
# ex = "lalala(.*)(haha)"
# print(re.findall(ex,key))
# 提取出hit
# key = "bobo@hit.edu.com"
# ex = "h.*\." #在正则表达式中匹配的内容包含了正则中的特殊字符,则一定要进行转义
# print(re.findall(ex,key))# 发现正则默认为贪婪模式,会尽可能多的匹配出内容
# 如果只匹配出hit,则要使用非贪婪模式
# key ="bobo@hit.edu.com"
# ex = "h.*?\."
# print(re.findall(ex,key))
# 匹配sas和saas
# key = "saas and sas and saaas"
# ex = "sa{1,2}s"
# print(re.findall(ex,key))
#匹配全部行
#string1 = """<div>静夜思
#窗前明月光
#疑是地上霜
#举头望明月
#低头思故乡
#</div>"""
#ex = ".*"
#print(re.findall(ex,string1,re.S))
#匹配手机号
data = "jfdsfdscgdfg13356666673fdsfsdfd"
ex = "1[1,5,7,8,9]\d{9}"
print(re.findall(ex,data))