python中的正则表达式

  • 什么是正则表达式?
    • 正则表达式(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))


上一篇:C#&SQL Server基于三层架构实现增删改查


下一篇:消息队列---RabbitMQ的学习(六)