正则表达式是解决字符串的强劲专用工具。做为一个定义来讲,正则表达式针对python而言并并不是特有的。可是,Python中的正则表达式在具体应用全过程中還是有一些细微的区别。

正则表达式是一个独特的标识符编码序列,它能协助你便捷的查验一个字符串是不是与某类模式配对。

Python 自1.5版本起提升了re 模块,它出示 Perl 设计风格的正则表达式模式。

re 模块使 Python 語言有着所有的正则表达式作用。

compile 函数依据一个模式字符串和可选择的标示主要参数转化成一个正则表达式目标。该目标有着一系列方式 用以正则表达式配对和更换。

re 模块也出示了与这种方式 作用完全一致的函数,这种函数应用一个模式字符串作为他们的第一个主要参数。

1、搜索第一个配对串

import re
s='i love python very much'
pat='python'
r=re.search(pat,s)
print(r.span())#(7,13)

2、搜索所有1

import re
s='山东潍坊市青州市第一初中高三1班'
pat='1'
r=re.finditer(pat,s)
for i in r:
 print(i)
# <re.Match object; span=(9, 10), match='1'>
# <re.Match object; span=(14, 15), match='1'>

3、\d配对数据[0-9]

import re
s='一共20行程序执行時间13.59s'
pat=r'\d '# 表明配对数据(\d表明数据的通用性标识符)1次或数次
r=re.findall(pat,s)
print(r)
#['20','13','59']

大家想保存13.59而不是分离,可以看4

4、?表明前一个字符配对0或1次

import re

s='一共20行程序执行時间13.59s'
pat=r'\d \.?\d '#?表明配对小数位(\.)0次或1次
r=re.findall(pat,s)
print(r)
#['20','13.59']

5、^配对字符串的开始

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'^[emrt]' #搜索以
r=re.findall(pat,s)
print(r)
# [],由于字符串的开头是标识符`T`,没有emrt配对范畴内,因此 回到为空

6、re.I 忽视英文大小写

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'^[emrt]' #搜索以
r=re.compile(pat,re.I).search(s)
print(r)
# <re.Match object; span=(0, 1), match='T'> 说明字符串的开始在配对目录中

7、应用正则表达式获取英语单词

它是不精确版本,请查看第9个

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s[a-zA-Z] '
r=re.findall(pat,s)
print(r) #[' module', ' provides', ' regular', ' expression', ' matching', ' operations', ' similar', ' to', ' those', ' found', ' in', ' Perl']

8、只捕捉英语单词,除掉空格符

应用()捕捉,它是不精确版本,请查看第9个

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s([a-zA-Z] )'
r=re.findall(pat,s)
print(r)
#['module', 'provides', 'regular', 'expression', 'matching', 'operations', 'similar', 'to', 'those', 'found', 'in', 'Perl']

9、填补上第一个英语单词

上边第八,见到获取英语单词中未包含第一个英语单词,应用?表明前边标识符出現0次或1次,可是此标识符也有表明贪婪或者非贪婪配对含意,应用时要慎重。

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s?([a-zA-Z] )'
r=re.findall(pat,s)
print(r)
#['This', 'module', 'provides', 'regular', 'expression', 'matching', 'operations', 'similar', 'to', 'those', 'found', 'in', 'Perl']

10、应用split函数立即切分英语单词

应用之上方式 切分英语单词,并不是简约的,只是为了更好地演试。切分英语单词非常简单還是应用split函数。

import re

s = 'This module provides regular expression matching operations similar to those found in Perl'
pat = r'\s '
r = re.split(pat,s)
print(r)
#['This', 'module', 'provides', 'regular', 'expression', 'matching', 'operations', 'similar', 'to', 'those', 'found', 'in', 'Perl']

11、获取以m或t开头的单词,忽视英文大小写

下边出現的結果并不是大家要想的,缘故出在 ?上!

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s?([mt][a-zA-Z]*)' # 搜索以
r=re.findall(pat,s)
print(r)
#['module', 'matching', 'tions', 'milar', 'to', 'those']

12、应用^搜索字符串开头的单词

综合性11和12获得全部以m或t开头的单词

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'^([mt][a-zA-Z]*)\s' # 搜索以
r=re.compile(pat,re.I).findall(s)
print(r) 
#['This']

13、先切分,再搜索符合要求的英语单词

应用match表明是不是配对

import re

s='This module provides regular expression matching operations similar to those found in Perl'
pat=r'\s '
r=re.split(pat,s)
res=[i for i in r if re.match(r'[mMtT]',i)]
print(res)
#['This', 'module', 'matching', 'to', 'those']

14、贪婪配对

尽量多的配对标识符

import re

content='<h>ddedadsad</h><div>graph</div>bb<div>math</div>cc'
pat=re.compile(r"<div>(.*)</div>") #贪欲模式
m=pat.findall(content)
print(m)
#['graph</div>bb<div>math']

15、非贪婪配对

与14对比,只是多了一个疑问(?),获得結果彻底不一样。

import re

content='<h>ddedadsad</h><div>graph</div>bb<div>math</div>cc'
pat=re.compile(r"<div>(.*?)</div>") #贪欲模式
m=pat.findall(content)
print(m)
#['graph', 'math']

与14较为得知,贪婪配对和非贪婪配对的差别,后面一种是字符串配对后马上回到,及时止损。

16、带有多种多样切分符

应用split函数

import re

content = 'graph math,,english;chemistry' #这类
pat=re.compile(r"[\s\,\;] ") #贪欲模式
m=pat.split(content)
print(m)
#['graph', 'math', 'english', 'chemistry']

17、更换配对的子串

sub函数完成对配对子串的更换

import re

content="hello 12345, hello 456321" 
pat=re.compile(r'\d ') #要更换的一部分
m=pat.sub("666",content)
print(m)
#hello 666, hello 666

18、抓取百度搜索首页标题

import re
from urllib import request
#网络爬虫抓取百度搜索引擎的首页內容
data=request.urlopen("http://www.baidu.com/").read().decode()
#剖析网页页面,明确正则表达式
pat=r'<title>(.*?)</title>'
result=re.search(pat,data)
print(result)
#<re.Match object; span=(1389, 1413), match='<title>百度一下,你就知道</title>'>

下边是知识要点共享

19、常见元字符小结

. 配对随意标识符  
^ 配对字符串始部位 
$ 配对字符串中完毕的部位 
* 前边的分子反复0次1次数次 
? 前边的分子反复一次或是0次 
 前边的分子反复一次或数次
{n} 前边的分子出現了 n 次
{n,} 前边的分子最少出現 n 次
{n,m} 前边的分子出現频次接近 n-m 中间
( ) 排序,必须輸出的一部分

20、常见通用性标识符小结

\s 配对空白字符
\w 配对随意英文字母/数据/下横线
\W 和小写字母 w 反过来,配对随意英文字母/数据/下横线之外的标识符
\d 配对十进制数据
\D 配对除开十进制数之外的值
[0-9] 配对一个0-9中间的数据
[a-z] 配对小写字母英语字母
[A-Z] 配对大写英文英文字母

之上便是Python中正则表达式模块的基础应用小结,里边有由浅入深的优化分析全过程,这种尽管是正中间全过程,可是针对正则表达式新手来讲,掌握这种很必须。小编针对正则表达式的了解也较为浅薄,若有小结不及时之处,恳求纠正。