Python 基础入门 8_1 正则表达式

"""自1.5版本后,引入re模块,使python可以写正则表达式,正则表达式是用来判断或者返回指定匹配模式的字符串:比如说:密码规则需要大小写字母和数字组成,如果我们输入字符串来判断复合密码规则,需要许多的判断语句,而用正则表达式则可以很快的判断出这个字符串是否符合字符串的要求,减少了代码的工作量

python正则表达式的实现需要引用 re模块:import rere模块的函数常用的有三个参数:pattern:编写规则,用来配对字符串是否符合规则:    pattern = "pa" ,该规则为第一个字符为p,第二个字符的为a的字符串规则string:要匹配的字符串flags: 标识符,标志位,用于控制正则表达式的匹配方式    re.I    忽略大小写    re.L    做本地户识别    re.M    多行匹配,影响^和$ ,如果要匹配的字符串为多行,需要赋这个值,不然只会匹配该字符的第一行,其他行不匹配    re.S    是.匹配包括换行符在内的所有字符    re.U    根据Unicode字符集解析字符,影响\W \W \b    re.X    使我们以更灵活的格式理解正则表达式

re.match(pattern,string,[flag]) 函数功能:从参数string字符串开始位置判断是否符合pattern规则,是返回一个‘_sre.SRE_Match‘对象,不是返回None"""import repatter1,patter2 = "www","wwW" #patter1 规则第一到第三位为w,patter2的规则从第一到第二为w,第三位为Wstring1,string2,string3,string4 = "www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"print(re.match(patter1,string1))          #返回对象   从string1的起始位置,前三位都为w,与patter1的规则符合print(re.match(patter1,string2))          #返回 None  从string2的起始位置,前三位为ww. 与patter1的规则不符合print(re.match(patter1,string3))          #返回对象   从string3的起始位置,前三位都为w,与patter1的规则符合print(re.match(patter1,string4))          #返回None   从string4的起始位置,前三位为bai,与patter1的规则不符合print(re.match(patter2,string1))          #返回None   从string1的起始位置,前三位都为w,与patter2(前三位为wwW)的规则不符合print(re.match(patter2,string1,re.I))     #返回对象   从string1的起始位置,前三位都为w,与patter2(前三位为wwW)的规则不符合,                                          # 但flag的参数为re.I,这个值是忽略大小写,即可以将patter2的规则看成www,所以string1符合要求

"""re.search(pattern,string,[flag]) 函数功能:从string字符串中判断是否有包含pattern规则,有返回对象,没有返回None"""
patter1,patter2 = "www","wwW"string1,string2,string3,string4 = "www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"
print("1==============================")print(re.search(patter1,string1))          #返回对象print(re.search(patter1,string4))          #返回对象print(re.search(patter2,string1,re.I))     #返回None

"""re.findall(pattern,string,[flag]) 函数功能:从string字符串中是否有包含pattern规则,有则返回能匹配pattern规则字符的列表,没有返回空列表(可以知道这字符串可以有多少个匹配pattern规则的)"""
patter1,patter2 = "www","wwW" string1,string2,string3,string4 = "www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"
print("2--------------------------------")print(re.findall(patter1,string1))        #返回["www","www"]列表print(re.findall(patter1,string2))        #返回[]列表

R"""pattern的单字符规则:.  匹配除换行符以外的任意字符 ^ 脱字符,表示不匹配集合的字符,与字符集合搭配\d 匹配数字,效果同[0-9]\D 匹配非数字字符,效果同[^0-9]\w 匹配数字,字母和下划线,同[0-9a-zA-Z_]\W 匹配非数字,字母和下划线,同[^0-9a-zA-Z_]\s 匹配空白符(空格,换行,回车,换页,制表),同[ \f\n\r\t]\S 匹配非空白符,同[~ \f\n\r\t]

[0123456789] []是字符集合,表示匹配括号中所包含的任意一个字符,该字符集合是匹配数字[a-z]   匹配任意小写字母[A-Z]   匹配任意大写字母[0-9a-zA-Z_] 匹配任意的数字、字母和下划线"""
patter1,patter2 = "www","wwW" string1,string2,string3,string4 = "www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"
print("3+++++++++++++++++++++++++")print(re.search(".",string1))        #返回对象print(re.search("\d",string1))       #返回Noneprint(re.search("\w",string1))       #返回对象print(re.search("\s",string1))       #返回对象print(re.search("[0-9]",string1))    #返回None

R"""pattern(正则表达式)的锚字符(即边界字符)的规则,^str   行首匹配,和在[]里的^表示的不一样str$   行尾匹配\Astr  匹配字符串开始位置 ,与^的区别是,^字符串为多行时,返回每行首匹配,\A是只匹配第一行的开头str\Z  匹配字符串结束,与$的区别是,$字符串为多行时,返回每行尾匹配,\Z是只匹配第一行的结尾str\b  匹配一个单词的边界str\B  匹配一个非单词的边界"""print("4+++++++++++++++++++++++++")
patter1,patter2 = "www","wwW" string1,string2,string3,string4 = "www.baidu.comwww","ww.baidu.com","wwww.baidu.com","baidu.com www"
print(re.search("^www",string3))      #返回对象print(re.search("^www",string2))      #返回Noneprint(re.search("com$",string2))      #返回对象

string5 = "www.hjlin.com\nwww.baidu.com"print(re.findall("^www",string5))          #返回["www"]print(re.findall("^www",string5,re.M))     #返回["www","www"]print(re.findall(r"\Awww",string5))        #返回["www"]print(re.findall(r"\Awww",string5,re.M))   #返回["www"]

print(re.findall("com$",string5))          #返回["com"]print(re.findall("com$",string5,re.M))     #返回["com","com"]print(re.findall(r"com\Z",string5))        #返回["com"]print(re.findall(r"com\Z",string5,re.M))   #返回["com"]

print(re.search(r"er\b","ever"))           #返回对象print(re.search(r"er\b","everst"))         #返回Noneprint(re.search(r"er\B","ever"))           #返回对象print(re.search(r"er\B","everst"))         #返回None

R"""正则表达式 指定多个字符串为规则str    以str为整体去匹配str?   以0个或者1个str为整体去匹配str1|str2  以str1或者str2为整体去匹配 

#以下str,只能为单个字符,若str是多个字符组成的字符串,效果会于结果不一致或返回None(空列表)str*          以多个str为整体去匹配str+          以至少一个str为整体去匹配str{int}      以int个str为整体去匹配str{int,}     以至少int个str为整体去匹配str{int,int1} 以至少int个,最多int1个str为整体去匹配 """print("5+++++++++++++++++++++++++++++")print(re.findall("hjl","hjl hjl hjl"))          #返回["hjl","hjl","hjl"]print(re.findall("hjl","h j l h j l h j l"))    #返回[]

print(re.findall("hjl?","hjl hjl hjl"))         #返回["hjl","hjl","hjl"],因为hjl不为一个字符的字符串,因此导致结果于hjl的规则一致print(re.findall("hjl?","hjlhjlhjl "))          #返回["hjl","hjl","hjl"],因为hjl不为一个字符的字符串,因此导致结果于hjl的规则一致print(re.findall("a?","aaa"))                   #返回["a","a","a",""]print(re.findall("a","aaa"))                    #返回["a","a","a"]

print(re.findall("a*","abaabbaaabbbaaaabbbb"))  #返回["a","","aa","","","aaa","","","","aaaa","","","",""]print(re.findall("hjl*","hjlhjlhjl "))          #返回["hjl","hjl","hjl"]

print(re.findall("a+","abaabbaaabbbaaaabbbb"))                            #返回["a","aa","aaa","aaaa"]print(re.findall("hjl+","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb"))      #返回["hjl","hjl","hjl","hjl","hjl","hjl","hjl","hjl","hjl","hjl"]

print(re.findall("a{2}","abaabbaaabbbaaaabbbb"))                          #返回["aa","aa","aa","aa"]print(re.findall("hjl{2}","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb"))    #返回[]print(re.findall("a{2,}","abaabbaaabbbaaaabbbb"))                         #返回["aa","aaa","aaa"]print(re.findall("hjl{2,}","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb"))   #返回[]print(re.findall("a{2,3}","abaabbaaabbbaaaabbbb"))                        #返回["aa","aaa","aaa"]print(re.findall("hjl{2,3}","hjlbhjlhjlbbhjlhjlhjlbbbhjlhjlhjlhjlbbbb"))  #返回[]

print(re.findall("hjl|hjj" , "hjlbhjj"))  #返回["hjl","hjj"]print(re.findall("h|j","hjl"))            #返回["h","j"]

str="hjl is a man!hjl is a good man!hjl is a very good man"print(re.findall(r"hjl.*man",str))     #返回["hjl is a man !hjl is a good man !hjl is a very good man"]print(re.findall(r"hjl.*?man",str))    #返回["hjl is a man","hjl is a good man","hjl is a very good man"]#针对上述的两句正则进行说明:第一个规则为以 开头前三个为hjl,最后的三个为man,中间是除换行符之外的任意字符,可以有多个#第二个规则,再第一个规则的基础上,规定了开头和中间的部分为一个整体去匹配,即当程序遇到了第二个hjl,后面的内容和中间部分匹配,算第二个整体。

原文地址:https://www.cnblogs.com/hjlin/p/10660633.html

时间: 2024-10-04 02:47:41

Python 基础入门 8_1 正则表达式的相关文章

Python爬虫入门之正则表达式

在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我

Python基础入门教程,Python学习路线图

给大家整理的这套python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.此套教程,不但有视频教程,还有源码分享,让大家能真正打开python的大门,进入这个领域.现在互联网巨头,都已经转投到人工智能领域,而人工智能最好的编程语言就是python,未来前景显而易见.黑马程序员是国内最早开设人工智能的机构. 一.首先先推荐一个教程 8天深入理解python教程:http://pan.baidu.com/s/1kVNm

Python怎么样入门?Python基础入门教程

给大家整理的这套python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.此套教程,不但有视频教程,还有源码分享,让大家能真正打开python的大门,进入这个领域.现在互联网巨头,都已经转投到人工智能领域,而人工智能最好的编程语言就是python,未来前景显而易见.黑马程序员是国内最早开设人工智能的机构. 一.首先先推荐一个教程 8天深入理解python教程:http://pan.baidu.com/s/1kVNm

Python基础入门一文通 | Python2 与Python3及VSCode下载和安装、PyCharm激活与安装、Python在线IDE、Python视频教程 򘳕

原文: http://blog.gqylpy.com/gqy/481 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

Python基础入门 (一)

一.关于版本的选择 Should i use Python 2 or Python 3 for my development activity?转载自Python官网 Short version: Python 2.x is legacy, Python 3.x is the present and future of the language Python 3.0 was released in 2008. The final 2.x version 2.7 release came out

python 基础入门

Python 特点 1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单. 2.易于阅读:Python代码定义的更清晰. 3.易于维护:Python的成功在于它的源代码是相当容易维护的. 4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好. 5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断. 6.可移植:基于其开放源代码的特性,Py

python基础之 re(正则表达式)模块学习

今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. import retext = "JGood is a handsome boy, he is cool, clever, and so on..."m = re.match(r"(\w+)\s", text)i

Python基础入门 (四)

一.迭代器&生成器 1.迭代器仅仅是一容器对象,它实现了迭代器协议.它有两个基本方法: 1)next 方法 返回容器的下一个元素 2)_iter_方法 返回迭代器自身.迭代器可以使用内建的iter方法创建 ts = iter(['asd','sds','qweq']) #创建iter方法 print(ts.__next__()) #使用_next_方法返回下一个元素 print(ts.__next__()) print(ts.__next__()) #运行结果 asd sds qweq#需要注意

python 爬虫入门之正则表达式 一

python  正则表达式知识点 正则 常用符号 . : 匹配任意字符,换行符除外 * : 匹配前一个字符 0 次或者无限次 ? : 匹配前一个字符 0次或者1次 .* : 贪心算法 .*? :非贪心算法 (): 括号内的数据作为结果返回 正则常用方法: findall: 匹配所有符合规律的内容,返回包含结果的列表 Search: 匹配并提取第一个符合规律的内容,返回一个正则表达式对象 Sub: 替换符合规律的内容,返回替换后的值 正则表达式的基本应用 ,使用正则表达式过滤一个简单的test文件