正则表达式

概念

正则表达式( Regular expression)是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子。
总结: 正则表达式就是记录文本规则的代码,并不是哪门编程语言的特有的,它的语法可以用在多门语言中进行文字匹配。
比如: 我们要从一段文字中匹配出电话号,我们可以用\d表示一个数字,11位的电话号用正则表达式为:\d{11}。

参考链接

https://docs.python.org/zh-cn/3/library/re.html?highlight=re#module-re
https://deerchao.cn/tutorials/regex/regex-1.htm
https://regex101.com/
https://tool.oschina.net/regex#

re.compile(pattern,flags)

compile:是将正则表达式转换为模式对象,这样可以更有效率匹配。使用compile转换一次之后,以后每次使用模式时就不用进行转换。
它单独使用就没有任何意义,需要和findall(), match()搭配使用。
pattern:写正则表达式
flags:匹配模式

常用匹配模式:

re.I : 忽略大小写
re.M : 多行模式
re.S : 点任意匹配模式,改变’.'的行为

实例
#Python正则表达式
#Python通过re模块提供对正则表达式的支持。
# re模块的导入
import re

# 不需要pip 可以直接导入使用
# 演示
str1 = '我的电话号是12345678901'
str2 = '我的电话号是12345678901'

# 正则表达式对象
p  = re.compile(r'\d{11}')

# 根据正则表达式的对象规则,进行查找
result = re.findall(p,str1)
result

# 换种写法
# result = re.findall(r'\d{11}',str1)


# 为什么还要使用compile方法
# result = re.findall(p,str1)
# result = re.findall(p,str2)
# result
'''re.findall() ,常用
findall是匹配出字符串中所有跟指定值有关的值,并且以列表的形式返回。
未匹配到则返回一个空的列表。匹配出指定字符的所有值,并以列表返回值。'''

''' re.match  从字符串的第一个字符开始匹配,不常用, 注意点:match没有找到会返回None , 只要匹配到一个结果就返回'''
content = '''
我是张三
我是李四
我是
'''
re.findall('是.?',content)

#['是张', '是李', '是']
# []  方括号表示要匹配指定的几个字符
content = 'a1b2c3d4dACDE你好'
re.findall('[1,2,3]',content)  # [1,2,3]  等价于[1-3]
re.findall('[1-3]',content)
re.findall('[0-9]',content)


re.findall('[a-z]',content)
re.findall('[A-Z]',content)

re.findall('[a-zA-Z]',content)

re.findall('[0-9a-zA-Z]',content)

# 获取所有非数字的文本
re.findall('\D',content)
re.findall('[^0-9]',content)
# 如果^ 放在[]的里面 表示匹配除了[]中的以外的任意字符
# ^ 的使用匹配字符串的开始
content = """1001 张三  19
1002 张三  20
1003 张三  19
"""
# p = re.compile('^\d+',re.M)  #   + :重复一次或更多次
# re.findall(p,content)
# ['1001', '1002', '1003']

p1 = re.compile('\d+$',re.M)  #   $ : 匹配字符串的结束  
re.findall(p1,content)
# ['19', '20', '19']
# re.I : 忽略大小写
content = 'a1b2c3d4dACDE你好'

# re.findall('[a-zA-Z]',content)
p = re.compile('[a-z]',re.I)
re.findall(p,content)
# 匹配中文
content = 'a1b2c3d4dACDE你好'
p = re.compile('[\u4E00-\u9FA5]')
re.findall(p,content)
# 贪婪模式
# 正则表达式中 * ?+ 都是贪婪的
content = '<html><body></body></html>'
# ['<html>','body'....]
# p = re.compile('<.*>') # 贪婪,就是最大程度的获取符合规则的内容
# re.findall(p,content)
#['<html><body></body></html>']


# 非贪婪
# 用问号解决贪婪,
p = re.compile('<.*?>') # 贪婪,就是最大程度的获取符合规则的内容

re.findall(p,content)
#['<html>', '<body>', '</body>', '</html>']
# 组 ()
# 就是把正则表达式匹配的内容里面某些值给标记成组,我可以获取组的值
content = "my name is panda age 18"
p = re.compile('is (.*) age (.*)')

re.findall(p,content)

#[('panda', '18')]
# 让 . 能够匹配换行
content = """
<div class="class1">
        <p class="t1">           
            <span>
                <a>Python开发工程师</a>
            </span>
        </p>
        <span class="t2">北京</span>
        <span class="t3">1.5-2万/月</span>
</div>
<div class="class2">
        <p class="t1">
            <span>
                <a>java开发工程师</a>
            </span>
		</p>
        <span class="t2">上海</span>
        <span class="t3">1.5-2/月</span>
        <a>dfaf</a>
</div>
"""

p = re.compile('<p class="t1">.*?<a>(.*?)</a>',re.S)

re.findall(p,content)

#['Python开发工程师', 'java开发工程师']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值