python一定要学正则表达式么_python 学习之-----正则表达式

mport re

'''

# re 模块

regex 正则表达式,正则表达式应用范围:1爬虫;2自动化运维--开发自动化;

# 什么是正则表达式:一套规则: 匹配字符串的规则

# 能做什么 1 检测一个输入的字符串是否合法用户输入内容的时候,要提前做检测 2 从一个大文件中找到索引符合规则的内容

re模块和正则表达式的关系;有了re模块就可以在python 语言中操作正则表达式了

# 字符组 []

[abc] 匹配a,b,c 任意一个字符; [0-9] 匹配0-8 任意一个字符; [a-z] [A-Z][a-zA-z]

[0-9a-z] 数字和字母任意一个字符[0-9][0-9]表示两位数

'''

''''

*****************************一下是重点;正则表达式

元字符:

[0-9]---> \d 表示任意一个数字

[0-9a-zA-Z_] ----> \w 表示数字字母和下划线

#空格 (空格\tab\enter) --->\s

tab --->\t

enter----> \n

空格--->空格

#\W非数字,字母下划线

#\D 非数字

#\S 非空格,TAB enter

#[\d\D] 匹配所有字符

#. 除了换行符外所有字符

#[^\d] 匹配所有非数字

# ^ 匹配一个字符开始 只能从a 开始的

# $ 匹配一个字符结束

#^ 和$把正则表达式写死必须一一匹配

# a表达式|b 表达式 或 ab|cd 把长的部分放在前边

# \ 取消点的特殊意义

# . ^. .$ 举例: 海.----》匹配所有海.所有字符; ^海. -----> 匹配以海为开头的海.的字符; 海.$--> 以海.结尾的字符

# *+?{}综合应用

正则 待匹配对象 匹配结果 说明

李.? 李杰和李莲英和李二棍子李 【李杰,李莲,李二,李】 只匹配李后边一个任意字符

李.* 李杰和李莲英和李二棍子李 [李杰和李莲英和李二棍子,李] 匹配李后边0个或任意多个字符

李.+ 李杰和李莲英和李二棍子李 [李杰和李莲英和李二棍子】 只匹配李后边一个或者多个任意字符

李.{1,2}李杰和李莲英和李二棍子李 [李杰和,李莲英,李二棍] 只匹配李后边一个或二个任意字符

总结: *,+,,? 都属于贪婪匹配,但是,则匹配加?属于惰性匹配

# 字符集 [] [^]

[^] 非的意思,

# 分组() 与或 | [^]

分组 () 约束|描述的内容的范围问题

www\.(oldboy|baidu|jd|taobao)\.com

# 转义符 \ z加\取消特殊意义; r'' 在字符串前加r,让整个字符串不转义

# 贪婪匹配 和不贪婪匹配

# 几个常用的非贪婪匹配:

# *?重复任意次,但尽可能少重复;

# +? 重复1次或更多次,但尽可能少重复

# ??重复0次,或1次,但尽可能少重复

# {n,m}? 重复n到m次,但尽可能少重复

#{n,}? 重复n次以上,但尽可能少重复

# 量词

# {n}次 匹配N次

# {n,} 匹配N次,大于N次

#{n,m} 最少N次,最多M次

# ? 0次,或者1次

# + 1次,或者多次

# * 0次,或者多次

应用实例:

#整数或者小数: \d+(\.\d+)?

#手机号: [1][3-9]\d{9}

#判断用户输入的内容是否合法,如果合法就能查询到结果,如果输入不对就查不到结果

^[1][3-9]\d{9}$

#从一个大文件中找到所有符合规则的内容?

^[1][3-9]\d{9}$

'''

'''

# 贪婪匹配

在量词范围允许的情况尽量多进行匹配;

#惰性匹配 贪婪算法之后 回溯算法

#惰性匹配

在量词后边加? 元字符 量词?

# .*?x 表示匹配任意字符,任意多次苏,但是一旦遇到X就停下来

# .*x 表示匹配任意字符,任意多次,遇到最后一个X才停下来

转义字符:\. \\n \( 原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义

# 原本有特殊意义的内容,放在字符组总,会取消他的特殊意义;

[ ().*+?] 所有的内容在字符中会取消它的特殊意义

[\] 在内容有字符特意义

#[(]

^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ 18位身份证,15位身份证

^[1-9]\d{14}(\d{2}[\dx])?$

'''

import re

'''

findall 总是完整的正则进行匹配,显示括号里匹配的内容,获取的一个列表,返回所有的结果。获取所有符合条件的,优先显示分组中的

seearch 获取是一个变量,返回第一个,.group()的结果和group(0)的一致,还是按照完整的正则进行匹配,显示也显示匹配的一个内容,但是我们可以通过给group 方法传参数

#如果我们要查找的内容在一个复杂的环境中,且没有一个突出的与众的不同的特点,甚至会和不需要的杂乱数混合在一起,

#这时候我们就需要把所有的数据统计出来,然后对这个数据进行筛选,把我们真正需要的数据对用正则表达式()

#1 什么是爬虫

'''

import re

#举例说明:

ret=re.findall('a','eva egon yuan')

print(ret) # 返回所有的a

ret=re.search('a','eva egon yuan')

print(ret.group(0))

# 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以

# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None

# # split 分离

# ret= re.split('\d','alex333wusir')

# ret1=re.split('\d(\d)\d','alex333wusir')

# print(ret)

# print(ret1)

#

# sub 替换

# ret=re.ret('\d+,''H','alex333wusir',1) # 替换一次

# compile作用: 针对多次使用的正则表达式,需要多次解析时,可以使用compile先行解析

# ret=re.compile('\d+')

# res=ret.search('alex37176')

#finditer :生成一个迭代器,利用迭代器进行循环取值

# subn 替换一次

#match 以什么为开头的字符 ,以group 取值,作业在用户输入的内容的时候,用来规定字符串

# seach 用来寻找这个字符串中是不是含有满足条件的内容

# 时间 数据量大,优先考虑列表; 列表不能用insert ,列表不能用pop()

# 空间 功能,性能,(时间: 行数,底层执行;空间) ,用户体验

# 分组命名() (?P 对分组起名

# 分组命名的引用 在匹配开始和结束一直的字符串匹配是,后者对前者命名的进行应用

# 在python 使用正则表达式,要加r

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值