美文网首页
Python基础总结17(正则表达式)

Python基础总结17(正则表达式)

作者: zxhlcl | 来源:发表于2018-10-23 19:05 被阅读0次

1、正则表达式相关语法

正则表达式是用匹配或描述字符串的工具,就是一个字符串,字符串中是正则表达式
写法:r'字符串'
正则表达式包括两个部分:一是正则表达式语法,二是普通字符
用处:
(1)判断字符串是否满足某个条件--判断输入字符串是否是邮箱/手机号码/IP地址等
(2)提出满足条件的字符串
(3)字符串替换
常用字符含义
(1). -->匹配除了\n的任意字符
(2)\ -->转义符 注意:除了-号,中括号中不用转义
(3)\d \D-->\d 匹配数字0-9 \D 匹配非数字字符
(4)\s \S--> \s 匹配任意空白字符 \S 匹配非空白字符
(5)\w \W--> \w匹配包括下划线在内的任意字符:[A-Za-z0-9_] \W 匹配非字母数字下划线
(6)\b(检查边界):一个\b不会去匹配字符,而是单纯的检查\b出现的位置是否是单词边界
单词边界: 字符串开始和结尾、空格、换行、标点符号等,可以将两个单词隔开的字符都是单词边界
\B(检查非单词边界)
(7)^检查是否是字符串开头,$匹配字符串结尾
(8)[ ]匹配括号中出现的任意一个字符;
[字符1-字符2] 匹配一个字符,这个字符是unicode编码值再字符1到字符2之间任意一个
[^字符集]匹配一个不在此字符集中的字符
在中括号中有特殊功能的符号,只代表符号本身
-在[ ]外面没有特殊功能,在[ ]中要表示-本身,就不要放到两个字符之间
(9)*匹配前面一个字符0次或者多次;+匹配前面字符出现1次或多次;?匹配前面字符出现0次或1次
(10){m}匹配m次,{m,n}匹配M到N次,{m,}至少匹配m次,{ ,n}最多匹配n次
(12)条件1|条件2 ,先用条件1去匹配,再用条件2去匹配
(13)( ) 将括号中的内容作为一个整体
使用带括号的正则表达式匹配成功后,只获取括号中的内容(\除外)
正则表达式中可以通过\数字来重复前面()中匹配到的结果,数字代表前面的分组

re_str=r"abc...abc"
result1=re.fullmatch(re_str,"abc123abc")
result2=re.fullmatch(re_str,"abc,,,eabc")
print(result1,result2,sep=',')

re_str=r"a\\b,a\.b"
result1=re.fullmatch(re_str,"a\\b,a.b")
result2=re.fullmatch(re_str,"abceabc")
print(result1,result2,sep=',')

re_str=r"abc\b"
result1=re.fullmatch(re_str,"abc")
result2=re.fullmatch(re_str,"abcb")
print(result1,result2,sep=',')

re_str=r"\wabc\s123\d56"
result1=re.fullmatch(re_str,"aabc 123456")
result2=re.fullmatch(re_str,"_abc123456") #\t就可以匹配到
print(result1,result2,sep=',')

re_str=r"^abc$"
result1=re.fullmatch(re_str,"abc")
result2=re.fullmatch(re_str,"aabcc") #??
print(result1,result2,sep=',')

re_str=r"[abc]defg"
result1=re.fullmatch(re_str,"adefg")
result2=re.fullmatch(re_str,"abcdefg") #??
print(result1,result2,sep=',')

re_str=r"[a-z]123"
result1=re.fullmatch(re_str,"a123")
result2=re.fullmatch(re_str,"A123")
print(result1,result2,sep=',')

re_str=r"abc|ab|a"
result1=re.fullmatch(re_str,"abc")
result2=re.fullmatch(re_str,"ab")
print(result1,result2,sep=',')

re_str=r"(\d[a-z]){3}"
result1=re.fullmatch(re_str,"3d4g5f")
result2=re.fullmatch(re_str,"2diskt")
print(result1,result2,sep=',')

re_str=r"([a-z]{3})-([1-9]{2})\1\2"
result1=re.fullmatch(re_str,"abc-12abc12")
result2=re.fullmatch(re_str,"ccc-11ccc11")
print(result1,result2,sep=',')

re_str=r"[+-]?[1-9]?\d+"
result1=re.fullmatch(re_str,'-1023')
print(result1)

2、正则表达式相关方法

compile 编译正则表达式
fullmatch:完全匹配
match 匹配字符串开头,返回匹配对象或者None
search 返回满足正则表达式的第一个匹配对象
findall 获取字符串中满足正则表达式的所有子串,返回一个列表
finditer 返回一个迭代器
split 将字符串按照满足正则表达式条件的子串进行分割
sub 将满足正则表达式条件的子串替换成目标字符串

r=re.compile(r'([1-9]{3})\w?([abc]*)\d')
result=r.fullmatch('123habc2')
print('compile:',result)

result=re.fullmatch(r'\d[a-zA-Z]+','2hjdd')
print("fullmatch:",result)
print("fullmatch:",result.span())  #获取匹配成功的区间(左闭右开)
print("fullmatch:",result.start())
print("fullmatch:",result.end())
print("fullmatch:",result.group()) #获取匹配结果
print("fullmatch:",result.string)  #获取被匹配的原字符串

result=re.match(r'\d[a-zA-Z]+','2hh3a2sd')
print("match:",result)
print("match:",result.span())  #获取匹配成功的区间(左闭右开)
print("match:",result.start())
print("match:",result.end())
print("match:",result.group()) #获取匹配结果
print("match:",result.string)  #获取被匹配的原字符串

result=re.search(r'\d[a-zA-Z]+','2hj+sdf2sdf-a3se')
print(result)
print(result.group())
print(result.string)

re_str=r'(\d+)k[a-d]+'
str="ad123kaa242kbcd 124ka23"
result=re.findall(re_str,str)
print("findall:",result)
'''
注意:如果正则表达式里面有分组,取值的时候只取分组中匹配到的结果
      如果有多个分组,会将每个分组匹配到的结果作为一个元组的元素
'''
re_str=r'(\d+)k([a-d]+)'
str="ad123kaa242kbcd 124ka23"
result=re.findall(re_str,str)
print("findall:",result)

re_str=r'(\d+)k([a-d]+)'
str="ad123kaa242kbcd 124ka23"
result=re.finditer(re_str,str)
print("finditer:",result)
for item in result:
    print(item)

str='asdfasdf-asdf+asdf+asdf+asdfaf'
result=re.split(r'[+-]',str)
print("split:",result)

str="asdf989asdf908as0d98-asdf7-87-87asdf"
result=re.sub(r'\d+',"#",str)
print("sub:",result)

#练习:匹配字符串中所有数字
str='as12sd324s5234sd52dsf324sd235ds6436s08l80gl80djl0lj07'
re_str=r"\d+"
result=re.search(re_str,str)
while result:
    print(result,result.string)
    str=str[result.end():]
    result=re.search(re_str,str)

相关文章

  • Python正则表达式指南

    Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达...

  • Python基础总结17(正则表达式)

    1、正则表达式相关语法 正则表达式是用匹配或描述字符串的工具,就是一个字符串,字符串中是正则表达式写法:r'字符串...

  • Python正则表达式初识(三)

    前几天给大家分享了Python正则表达式基础(一)和Python正则表达式基础(二),感兴趣的小伙伴可以点击进去学...

  • Python正则表达式初识(三)

    前几天给大家分享了Python正则表达式基础(一)和Python正则表达式基础(二),感兴趣的小伙伴可以点击进去学...

  • python学习总结

    python基础语法总结 参考:Python基础语法总结 参考:1.Python标识符 在 Python 里,标识...

  • Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例...

  • Python语言的12个基础知识点小结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序、去重、字典排序、字典、列表...

  • 一些Python数据科学相关的速查表

    整理了一些Python数据科学相关的速查表。 Python基础 Python进阶 正则表达式 Numpy Scip...

  • Python学习总结【连载】(十五)

    Python学习总结【连载】(十五) 2018.07.02 Juttachen 概述 53 认识正则表达式 54 ...

  • 入手简单爬虫

    前置知识和要求: Python基本语法,程序逻辑基础完成 了解HTML 正则表达式 推荐视频:Python开发简单...

网友评论

      本文标题:Python基础总结17(正则表达式)

      本文链接:https://www.haomeiwen.com/subject/xaoazftx.html