re正则

#转义字符和原生字符

import re
#
# # 转义
# text = 'apple price is $299'
# ret = re.search('\$\d+',text)
# print(ret.group())
#

# 原生字符串
text = '\c'
ret = re.match('\\\\c',text)

print(ret.group())

# group 分组
text = "apple's price is $100, oriange's price is $22"
ret = re.search('.*(\$\d+).*(\$\d+)',text)
print(ret.group(2))
print(ret.groups())


# sub 替换
html  = '''
<div class="job-detail">
        <p>工作职责</p>
<p>1.通过模拟请求将人工复杂操作转变为自动化操作</p>
<p>2.将自动化操作融入整套系统</p>
<p>3.获取业务所需数据</p>
<p>职位要求<br></p>
<p>1.一年以上 Python 开发经验</p>
<p>2.精通网络编程、熟悉 HTTP 协议</p>
<p>3.熟悉 HTML、XPath、CSS、JavaScript</p>
<p>4.熟悉正则表达式,从结构化的和非结构化的数据中获取信息</p>
<p>5.拥有良好的编码习惯,结构清晰,命名规范,逻辑性强,认同单元测试</p>
<p>6.善于思考,能独立分析和解决问题</p>
<p>7.责任心强,具备良好的团队合作精神</p>
<p>8.熟练使用 Git,熟悉 Pull Request 工作流</p>
<p>9.如果您有 Blog、GitHub、Stack Overflow、微博、Twitter 帐号,强烈建议您附注在简历中</p>
        </div>
'''
ret = re.sub('<.*?>',"",html) # 只要标签之间的文字
print(ret)


# split 分割
text = 'hello world&ni hao'
ret= re.split('[^a-zA-Z]',text)
print(ret)


# compile

 

# 单个字符的匹配
import re

# 匹配某个字符串  如果是 ahello 就不会匹配到了
# match从开头匹配 所以ahello 就匹配不到
# text = "hello"
# ret = re.match('he',text)
# print(ret.group())


# 点 . 表示匹配任意的字符 .只能匹配一个字符
# . 不能匹配\n  换行符
# text = "hello"
# ret = re.match('.',text) #只拿到h
# print(ret.group())


# \d 匹配任意数字
# text = "1234"
# ret = re.match('\d',text) #只拿到 1
# print(ret.group())


# \D 匹配任意的非数字
# text = "abc"
# ret = re.match('\D',text) #只拿到 a
# print(ret.group())

# \s 匹配空白符(\n, \t,\r, 空格)
# text = "\t"
# ret = re.match('\s',text) #只拿到 1
# print(ret.group())


# \w 匹配 a-z A-Z 数字 下滑线
# text = "_aA"
# ret = re.match('\w',text) #只拿到 _
# print(ret.group())


# \W 跟\w 相反


# 组合的方式, 只要满足中括号里的字符就可以匹配
# text = "1"
# ret = re.match('[1a]',text) #只要text是以1或a开头就能匹配到
# print(ret.group())


# text = "0731-8888888abcdef"
# ret = re.match('[\d\-]+',text)
# print(ret.group()) #0731-8888888

# text = '0123'
# ret = re.match('[0-9]+',text)
# print(ret.group())  # 0123


text = 'abcd0123'
ret = re.match('[^0-9]+',text) # 匹配非 0-9
print(ret.group())

 

# 多个字符的匹配
import re

# * 匹配0 个或者多个字符
# text = 'abcd'
# ret = re.match('\s*',text)
# print(ret.group())

# + 匹配一个或者多个
# text = 'ab+cd'
# ret = re.match('\w+',text)
# print(ret.group())

# ? 匹配1个或者 0个
# text = 'abcd'
# ret = re.match('\w?',text)
# print(ret.group())

# {n}  指定匹配n 个字符
# text = 'abcd'
# ret = re.match('\w{3}',text)
# print(ret.group()) #abc


# {m,n} 匹配m-n 个字符
# 以匹配到的最多的为准
# text = 'abcd'
# ret = re.match('\w{1,3}',text)
# print(ret.group()) # abc

 

# 小案例练习

import re

'''
# 验证手机号码: 手机号码以 1 开头, 第二位是34578,剩下的9位随意
text = '13149133314'
ret = re.match('1[34578]\d{9}',text)
print(ret.group())


# 验证邮箱: 邮箱规则名称是 数字 字母 下划线 然后是@ 后面是域名
text = "dangshuaigood_163@163.com"
ret = re.match('\w+@[a-z0-9]+\.[a-z]+',text)
print(ret.group())


# url 的匹配
# url规则:前面是http https 后面是 :// 后面是任意非空白字符
# \s 匹配空白符(\n, \t,\r, 空格)
text = 'https://www.baidu.com/s?wd=python%20selenium&rsv_spt=1&rsv_iqid=0xa4d2655300017277&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&inputT=8498&rsv_t=dc42KYvFCf1oL197SvrZ7pGvUGE1hguHcVAhnk9wpNtiOobCOY%2FVykkEjR8gQl%2BzdBag&oq=%25E6%25B7%2598%25E5%25AE%259D&rsv_pq=b63f63a500002a02&rsv_sug3=47&rsv_sug1=42&rsv_sug7=100&rsv_sug2=0&rsv_sug4=9034'

ret = re.match('(http|https|ftp)://[^\s]+',text)
print(ret.group())


# 验证身份证  总共18位  最后一位可能是小写x或大写X
text = '411102198910152116'
ret = re.match('\d{17}[\dxX]',text)
print(ret.group())
'''


# ^ 一种是在中括号里表示取反  一种是以什么开头
# text = 'hello'
# ret = re.match('^he',text)
# print(ret.group())


# text = 'hello'
# ret = re.search('ll',text)
# print(ret.group())


# $ 以什么结尾
# text = 'xxxxx@163.com'
# ret = re.match('\w+@163.com$',text)
# print(ret.group())


# | 表示或  并集
# text = 'https'
# ret = re.match('(http|https)',text)
# print(ret.group())

# 贪婪模式  非贪婪模式


# 匹配0-100 之间的数字
text = '99'
ret = re.match('[1-9]\d?$|100$',text)
print(ret.group())

 

# re中常见的函数

import re

# 分组
# text = "apple's price is $99,orange's price is $10"
# ret = re.search('.*(\$\d+).*(\$\d+)',text)
# print(ret.group(2))

# print(ret.groups()) # 提取所有的子分组 ('$99', '$10')


# findall 返回的是列表 找出所有的满足条件的
# print(re.findall('\$\d+',text))
# ['$99', '$10']


html = '''
<div class="job-detail">
<p>工作职责</p>
<p>1.通过模拟请求将人工复杂操作转变为自动化操作</p>
<p>2.将自动化操作融入整套系统</p>
<p>3.获取业务所需数据</p>
<p>职位要求<br></p>
<p>1.一年以上 Python 开发经验</p>
<p>2.精通网络编程、熟悉 HTTP 协议</p>
<p>3.熟悉 HTML、XPath、CSS、JavaScript</p>
<p>4.熟悉正则表达式,从结构化的和非结构化的数据中获取信息</p>
<p>5.拥有良好的编码习惯,结构清晰,命名规范,逻辑性强,认同单元测试</p>
<p>6.善于思考,能独立分析和解决问题</p>
<p>7.责任心强,具备良好的团队合作精神</p>
<p>8.熟练使用 Git,熟悉 Pull Request 工作流</p>
<p>9.如果您有 Blog、GitHub、Stack Overflow、微博、Twitter 帐号,强烈建议您附注在简历中</p>
        </div>
'''
ret = re.sub('<.+?>',"",html)
# sub 是替换 用空把标签<>内的内容替换掉
# print(ret) # 拿到所有的文本


# split函数
text = 'hello world&ni hao'
ret = re.split('[^a-zA-Z]',text)
# print(ret)


# compile 用法
text = 'this number is 20.500'
ret = re.compile('\d+\.?\d*')
ret2 =re.search(ret,text)
print(ret2.group())

 

转载于:https://www.cnblogs.com/kenD/p/11123638.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值