python正则表达式re学习笔记

study1

import re

'''
注意一般匹配都是按行来处理的

普通字符像是字母数字,可以直接匹配

.表示要匹配的除了 换行符 外的任何单个字符
*表示匹配前面的子表达式任意次,包括0次
+表示匹配前面的子表达式一次或多次,与*不同的是它不包括0次
{}表示前面的字符匹配指定的次数 eg{3,6}至少出现3次至多出现6次  {4}出现4次
?可以表示前面的字符匹配0次或1次,以及贪婪和非贪婪模式study2
反斜杠\用途很多见study3
方括号[]可以解决选择性的功能
^不在方括号内表示匹配问本的起始位置,在单行模式表示匹配整个文本的开头,在多行模式表示匹配文本每行的开头位置
$表示问本的结束位置用法与^一样
()组选择study4

re的一些方法:
split方法
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 :re.match(pattern, string, flags=0)
re.search 扫描整个字符串并返回第一个成功的匹配。re.search(pattern, string, flags=0)
区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

re.sub用于替换字符串中的匹配项。re.sub(pattern, repl, string, count=0, flags=0)
    pattern : 正则中的模式字符串。
    repl : 替换的字符串,也可为一个函数。
    string : 要被查找替换的原始字符串。
    count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
re.findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
    findall(string[, pos[, endpos]])
    match 和 search 是匹配一次 findall 匹配所有。

'''

# .的使用

str = "苹果是绿色的,红色,绿+,绿油油油油"

form = re.compile(r'.色')
print(type(form)) #这个对象里面有很多处理字符串的方法
for one in form.findall(str):
    print(one)   #打印出绿色 红色

#*的使用

    #紧跟在.后表示任意字符出现任意次,eg .,*意思就是,后面的所有(包括逗号)
form2 = re.compile(r',.*')
for one in form2.findall(str):
    print(one)   #打印出绿色 红色
    # 紧跟在字符后表示前面字符出现任意次,eg .,*意思就是,后面的所有(包括逗号)

#+的使用
print("+")
form2 = re.compile(r'绿色+')
for one in form2.findall(str):
    print(one)   #打印出绿色 后面的绿没有打印出

#{}的使用
print("{}")
form2 = re.compile(r'绿油{3,6}')
for one in form2.findall(str):
    print(one)

#[]的使用
print('[]')
str = "13500001111, 13900002222"
form2 = re.compile(r'1[35]\d{9}')  #表示3或5,而非35
for one in form2.findall(str):
    print(one)#两个都输出
print()
form3 = re.compile(r'13[5]\d*')
for one in form3.findall(str):
    print(one)#只输出了一个

#也可以写范围[3-7]这样,也可以匹配字符如[A-F]
#一些元字符在方括号失去作用了,eg .只表示.不表示任意字符了  如a[.]
#方括号中^表示非

#^的使用
#这里要学会'''的用法
str = '''001-苹果-60
002-橙子-70'''
print("^")
form2 = re.compile(r'\d+')
for one in form2.findall(str):
    print(one) #想选序号结果全部都出了
print()
form3 = re.compile(r'^\d+',re.M) #设置为多行模式
for one in form3.findall(str):
    print(one)#编号
print()
form4 = re.compile(r'\d+$',re.M) #设置为多行模式
for one in form4.findall(str):
    print(one)#价格

#split使用正则
str = '你好世界;你好世界 你好世界, 你好世界'
list = re.split(r'[;,\s]\s*',str)
print(list) #['你好世界', '你好世界', '你好世界', '你好世界']

 study2

import re

#贪婪模式和非贪婪模式(在*和+第一定要注意,尽可能多还是尽可能少地匹配)

#想把所有的html标签提取出来
str = '<html><head><title>Title</title>'

#想得到一个列表
form = re.compile(r'<.*>')
result = form.findall(str)
print(result) #得到['<html><head><title>Title</title>']  这个情况显然不是想要的,这种情况叫贪婪模式也就是尽可能多地匹配

#非贪婪模式是在后面加?
form = re.compile(r'<.*?>')
result = form.findall(str)
print(result) #输出['<html>', '<head>', '<title>', '</title>']


study3

import re

#\的使用   \的用途有很多

#1.转义
#匹配. * 等这些特殊字符
str = "苹果.是绿色的"
form = re.compile(r'.*\.') #匹配.前面的所有字符
result = form.findall(str)
print(result)

#2.匹配某种类型的一个字符
'''
\d匹配0-9之间任意一个数字字符等价于[0-9]
\D匹配任意一个不是0-9的数字字符,等价于[^0-9]
\s匹配任意一个空白字符,包括空格、tab、换行符等,等价于[\t\n\r\f\v]
\S匹配任意要给非空白字符
\w匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式[a-zA-Z0-9] (经常用在判断用户登录输入)
    \w也包含Unicode的字符比如中文,如果指定ASCII码那么只能匹配ASCII(re.A)
        compile(,re.A) A是 ASCII码模式
        M是多行模式
        I是大小写敏感模式
\W匹配任意一个非文字字符
'''

study4

import re

#()组选择

str = '''苹果,苹果红色
橘子,橘子橙色'''
form = re.compile(r'.*,',re.M) #想选水果名
for one in form.findall(str):
    print(one) #但包含逗号
form2 = re.compile(r'(.*),',re.M) #想选水果名
for one in form2.findall(str):
    print(one) #现在不包含逗号了

#上面是选择一组,接下来获取多组内容,可以用去对爬取内容的处理,如生成名字手机号对应信息等
print()
form2 = re.compile(r'^(.*)(,)',re.M) #想选水果名
for one in form2.findall(str):
    print(one) #出来的是元组

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值