关于python正则表达式的一些常见知识点

import re
pat="yue"
str="http://yum.qiqyue.com"
re.search(pat,str)
<_sre.SRE_Match object; span=(14, 17), match='yue'>
#如字符串没有匹配对象
str2 = "http://yum.com"
print(re.search(pat,str2))
None
pat="好人"
str="大家好,好人"
re.search(pat,str)
<_sre.SRE_Match object; span=(4, 6), match='好人'>
#匹配非打印字符
pat2="\n"
str = '''jksfs
fafda'''
re.search(pat2,str)
<_sre.SRE_Match object; span=(5, 6), match='\n'>
#通用字符作为原子,\w:字母、数字、下划线;\d:一位的十进制数;\s:任意空白字符
#\W:任意除了字母、数字、下划线;\D:相反;\S:相反
pat3="\w\dpython\w"
str='d12323python2'
re.search(pat3,str)
<_sre.SRE_Match object; span=(4, 13), match='23python2'>
str2="fafda"
str3="fafasfdsa2python2======"
print(re.search(pat3,str2))
print(re.search(pat3,str3))
None
<_sre.SRE_Match object; span=(8, 17), match='a2python2'>
#原子表:可以定义一组平等的原子。用[]定义
pat="pyth[oiy]n"
str="afasfpythonfdasfas"
print(re.search(pat,str))
<_sre.SRE_Match object; span=(5, 11), match='python'>
#元字符:特殊含义字符,比如某字符重复n次
#.:匹配任意字符;
#^:匹配字符串开始位置;
#$:匹配结束位置;
#*:匹配0次、一次、多次字符;
#?:匹配0次、一次;
#+:一次、多次
#{3}:前面的原子恰好出现3次
pat="t{3}"
str="atttaa"
print(re.search(pat,str))
print("++++++++++++++++++++++++")
#由于*可以匹配0次,所以一般在字符串开头(默认)就进行匹配了
pat1="t*"
str1="aaaa"
print(re.search(pat1,str1))
print("++++++++++++++++++++++++")
pat2="$t*"
str2="wwwww"
print(re.search(pat2,str2))
<_sre.SRE_Match object; span=(1, 4), match='ttt'>
++++++++++++++++++++++++
<_sre.SRE_Match object; span=(0, 0), match=''>
++++++++++++++++++++++++
<_sre.SRE_Match object; span=(5, 5), match=''>
#t{n,}:t至少出现了n次
#t{n,m}:t至少出现n次,至多出现m次
#|:或
#():提取某一个内容
#例
pat='.python...'
str = 'a#pythonre$'
print(re.search(pat,str))
<_sre.SRE_Match object; span=(1, 11), match='#pythonre$'>
#会将第一匹配内容匹配出来
pat="python|java"
str = 'djava2323pythondfasf'
print(re.search(pat,str))
<_sre.SRE_Match object; span=(1, 5), match='java'>
#模式修正符:可以在不改变正则表达式的情况下,通过模式修正符改变表达式的含义
#I:忽略大小写
#m:多行匹配
#L:本地化识别匹配
#U:根据Unix字符解析我们字符
#S:让.也匹配换行符
pat1="python"
pat2="python"
str = 'djava2323Pythondfasf'
print(re.search(pat1,str))
print(re.search(pat2,str,re.I))
None
<_sre.SRE_Match object; span=(9, 15), match='Python'>
#贪婪模式:尽可能多的匹配
#懒惰模式:尽可能少的匹配
pat1="p.*n"#贪婪模式
pat2="p.*?n"#懒惰模式
str = 'dpynhondfnasf' 
print(re.search(pat1,str))
print(re.search(pat2,str,re.I))#更精确的定位
<_sre.SRE_Match object; span=(1, 10), match='pynhondfn'>
<_sre.SRE_Match object; span=(1, 4), match='pyn'>
#正则表达式函数
#re.mactch(),从头开始进行匹配;re.search(),从任何位置开始匹配,只能匹配一个结果;全局匹配函数、re.sub()函数
print(re.match(pat1,str))
None
str = "phfsfsfsnad"
print(re.match(pat1,str))
<_sre.SRE_Match object; span=(0, 9), match='phfsfsfsn'>
pat1='p.*?y'
str = "hsdgspdfsafafasfafsdfypfasfasy"
print(re.search(pat1,str))
print(re.match(pat1,str))
<_sre.SRE_Match object; span=(5, 22), match='pdfsafafasfafsdfy'>
None
#全局匹配
print(re.compile(pat1).findall(str))
['pdfsafafasfafsdfy', 'pfasfasy']
#常见的正则示例
pat='[a-zA-Z]+://[^\s]*[.com|.cn]'
string='<a href="http://www.google.com">fasfadsf<\a>'
rst=re.compile(pat).findall(string)
print(rst)
['http://www.google.com']
#匹配电话号码
pat='<title>(.*?)</title>'
import urllib.request
data=urllib.request.urlopen("https://edu.csdn.net/course/detail/3527").read()
print(re.compile(pat).findall(data.decode()))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值