导入
正则表达式(或RE)是一种小型的,高度专业化的编程语言,它内嵌在python中,并通过re模块实现。
–可以为想要匹配的相应字符串集指定规则
–该字符串集可能包含英文语句,e-mail地址,命令或任何你想要得到的数据
–可以问诸如“这个字符串匹配该模式吗?”;“在这个字符串中是否有部分匹配该模式呢?”
–可以使用RE以各种方式来修改或分隔字符串。
定义
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字
符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来 表达对字符串的一种过滤逻辑。
正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则
表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页
面内容提取出我们想要的内容就易如反掌
import re
#(1) 普通字符作为原子
pattern="shu"
string="http://xioahongshu.com"
result=re.search(pattern,string)
print(result)
<_sre.SRE_Match object; span=(15, 18), match='shu'>
#(2)非打印字符作为原子
#一些字符串用于格式控制的符号,比如换行符
pattern="\n"
string="""http://xiaohongshu.com
http://xiaohongshu.com
"""
result=re.search(pattern,string)
print(result)
<_sre.SRE_Match object; span=(22, 23), match='\n'>
#(3):通用字符作为原子
#pattern="23python_"#这样写也可以,但还有另外一个比较好的方法
#23是数字,匹配用到\d\d或者是\d{2},匹配下划线用\w
pattern="\d\dpython\w"
#pattern="\d{2}python\w"#这样也是可以的
string="hhushfjs123python_py"
result=re.search(pattern,string)
print(result)
<_sre.SRE_Match object; span=(9, 18), match='23python_'>
#(4):原子表(字符集)
#pattern="\d\dpython[^zxy]"
pattern="\d\dpython[_zxy]"
string="hhushfjs123python_py"
result=re.search(pattern,string)
print(result)
<_sre.SRE_Match object; span=(9, 18), match='23python_'>
#(5)元字符
#除了[--]和[^--]是字符集,之外,那张表上其他字符都是元字符
pattern="python..."
pattern="python.*"
<_sre.SRE_Match object; span=(9, 18), match='23python_'>
#(6)边界限定符
pattern="^abc"#匹配开头是否是abc,如果没有就会返回None
pattern="py$"#匹配末尾是py,如果没有就会返回None
<_sre.SRE_Match object; span=(18, 20), match='py'>
#(7)次数限定符
pattern="py.*"#贪婪模式,只要符合条件就会匹配,尽可能匹配多的次数
string="abcshfjs123python_pyasdf"
result=re.search(pattern,string)
print(result)
pattern="py.*?y"#非贪婪模式,尽可能减少匹配多的次数
string="abcshfjs123python_pycyasdf"
<_sre.SRE_Match object; span=(11, 22), match='python_pycy'>
pattern="abc{2,4}"#贪婪模式,只要符合条件就会匹配,尽可能匹配多的次数,这里{}里面的次数是指的前一个字符
string="abccccccshfjs123python_pycyasdf"
<_sre.SRE_Match object; span=(0, 6), match='abcccc'>
pattern="(abc){2}"
string="abcabcccccshfjs123python_pycyasdf"
result=re.search(pattern,string)
print(result)
<_sre.SRE_Match object; span=(0, 6), match='abcabc'>
#(8)模式选择符
pattern="python|hfj"
string="abccccccshfjs123python_pycyasdf"
result=re.findall(pattern,string)
print(result)
['hfj', 'python']
模式及函数
练习
#匹配到电话号码
#021-6789456710000 匹配八位
#0423-12345678923 匹配七位
pattern="\d{3}-\d{8}|\d{4}-\d{7}"
string="021-6789456710000"
#string="0423-12345678923"
result=re.search(pattern,string)
print(result)
<_sre.SRE_Match object; span=(0, 12), match='021-67894567'>
<_sre.SRE_Match object; span=(0, 12), match='0423-1234567'>
#匹配电子邮箱
#shih998_SH@163.com
#SSS_II@qq.vip.com
pattern="\w+@\w+(\.\w+){1,2}"
string="SSS_II@qq.vip.com"
result=re.search(pattern,string)
print(result)