Python程序设计课件 第六章 正则表达式.pptx
;本章知识点导图;元字符;字符;x|y;【例6-1】在文本“eamil120487362@1234”中找出Email,匹配模式为:
\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,4}\b
具体的表达式解析如下图所示。;如果要在正则表达式中使用元字符本身的意义,例如想搜索字符串中的“?”,那么需要对元字符“?”进行转义,使用的方法是把一个反斜杠(\)放在元字符前面,这样元字符就失去了其特殊的意义,还原回它本身代表的字符意义。
当在正则表达式中某个元字符前面放置了一个反斜杠时,就表示反斜杠去掉了元字符的特殊意义,使字符代表其本身的含义。但如果在某个正则表达式中看到字母数字前面有一个反斜杠时,这样的反斜杠用于创建元符号。元符号提供了某些正则表达式元字符的简写方式。;例如要提取这些书合计79.8000万元还是79.0000万元中的数字,可以用如下的匹配模式:
(\d{2}\.\d{1,2}0?)
\d{2}表示匹配两位数字
\.表示匹配小数点号,由于点号是元字符,所以这里要加\转义
\d{1,2}表示匹配一到两位数字
0?表示匹配0的次数为0到1次,结果为0或者00
所以上式最终匹配的结果为79.800和79.000。
在正则表达式中还经常出现以下两种组合:;In[4]:a=xxIxxjshdxxlovexxsffaxxpythonxx
???...:re.findall(xx(.*?)xx,a)
Out[4]:[I,love,python]
?
In[5]:a=xxIxxjshdxxlovexxsffaxxpythonxx
???...:re.findall(xx(.*)xx,a)
Out[5]:[Ixxjshdxxlovexxsffaxxpython];Python中的正则表达式模块re提供了match()、search()和findall()等方法处理字符串。;In[1]:importre
???...:s=没有一种工作是钱多事少离家还近,钱多事少的工作是没有的。
???...:pat=钱多事少
???...:res_1=re.match(pat,s)
???...:print(res_1)
None;In[3]:res_2.span()
Out[3]:(0,2)
?
In[4]:res_2.group()
Out[4]:没有;search()方法;findall()方法;In[5]:print(re.findall(ra.*b,str))#符号.*贪婪模式,匹配从.*前面为开始到后面为结束的所有内容
[aabbabaabbaac2.b]
?
In[6]:print(re.findall(ra.*?b,str))#符号.*?非贪婪模式,遇到开始和结束就进行截取,因此截取多次符合的结果,中间??有字符也会被截取
[aab,ab,aab,aac2.b]
?
In[7]:print(re.findall(ra(.*?)b,str))#符号(.*?)与上面一样,但仅只保留括号的匹配出来的内容
[a,,a,ac2.];查找替换re.sub();使用%符号进行格式化;In[2]:name1=Bigben
???...:print(Hesaidhisnameis%d.%name1)#%d表示展位数值,但name1为字符型,返回错误
Traceback(mostrecentcalllast):
?
Fileipython-input-1-d3549f33c4f0,line2,inmodule
print(Hesaidhisnameis%d.%name1)
?
TypeError:%dformat:anumberisrequired,notstr;format()格式化;In[3]:print({1}今天{0}.format(拍视频,陈某某))#通过位置格式化
陈某某今天拍视频
?
In[4]:print({0}今天{1}.format(陈某某,拍视频))
陈某某今天拍视频;(3)精度和f类型。
小数位数的精度常和浮点型f类型一起使用。;(5)千分位分隔符。
这种情况只针对数值型。;实践