字符串是編程時涉及到的最多的一種數(shù)據(jù)結(jié)構(gòu),對字符串進行操作的需求幾乎無處不在。比如判斷一個字符串是否是合法的Email地址,雖然可以編程提取@前后的子串,再分別判斷是否是單詞和域名,但這樣做不但麻煩,而且代碼難以復用。
正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規(guī)則,凡是符合規(guī)則的字符串,我們就認為它“匹配”了,否則,該字符串就是不合法的。

>>>import re
>>>re.match('.','abc')
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>>re.match('.','abc').group()
'a'



匹配網(wǎng)址:
import re
addr = input('請輸入網(wǎng)址:')
print(re.match('\w{4,20}@163\.com$',addr))
結(jié)果如下:




search
需求:匹配出文章閱讀的次數(shù)

findall
需求:統(tǒng)計出python、c、c++相應文章閱讀的次數(shù)

sub 將匹配到的數(shù)據(jù)進行替換
需求:將匹配到的閱讀次數(shù)加1
方案一:

方案二:
import re
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
ret = re.sub(r"\d+", add, "python = 997")
print(ret)
ret = re.sub(r"\d+", add, "python = 99")
print(ret)
結(jié)果如下:

從下面的字符串中取出文本
<div>
<p>崗位職責:</p>
<p>完成推薦算法、數(shù)據(jù)統(tǒng)計、接口、后臺等服務器端相關(guān)工作</p>
<p><br></p>
<p>必備要求:</p>
<p>良好的自我驅(qū)動力和職業(yè)素養(yǎng),工作積極主動、結(jié)果導向</p>
<p> <br></p>
<p>技術(shù)要求:</p>
<p>1、一年以上 Python 開發(fā)經(jīng)驗,掌握面向?qū)ο蠓治龊驮O計,了解設計模式</p>
<p>2、掌握HTTP協(xié)議,熟悉MVC、MVVM等概念以及相關(guān)WEB開發(fā)框架</p>
<p>3、掌握關(guān)系數(shù)據(jù)庫開發(fā)設計,掌握 SQL,熟練使用 MySQL/PostgreSQL 中的一種<br></p>
<p>4、掌握NoSQL、MQ,熟練使用對應技術(shù)解決方案</p>
<p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p>
<p> <br></p>
<p>加分項:</p>
<p>大數(shù)據(jù),數(shù)理統(tǒng)計,機器學習,sklearn,高性能,大并發(fā)。</p>
</div>

使用劃紅線的正則表達式可以完成文本的抽取。
有一批網(wǎng)址:
http://www.interoem.com/messageinfo.asp?id=35
http://3995503.com/class/class09/news_show.asp?id=14
http://lib.wzmc.edu.cn/news/onews.asp?id=769
http://www.zy-ls.com/alfx.asp?newsid=377&id=6
http://www.fincm.com/newslist.asp?id=415
需要 正則后為:
http://www.interoem.com/
http://3995503.com/
http://lib.wzmc.edu.cn/
http://www.zy-ls.com/
http://www.fincm.com/
import re
s = '''http://www.interoem.com/messageinfo.asp?id=35
http://3995503.com/class/class09/news_show.asp?id=14
http://lib.wzmc.edu.cn/news/onews.asp?id=769
http://www.zy-ls.com/alfx.asp?newsid=377&id=6
http://www.fincm.com/newslist.asp?id=415'''
ret = re.findall(r'http.+\.[a-z]{2,3}/', s)
for i in ret:
print(i)

split
根據(jù)匹配進行切割字符串,并返回一個列表
需求:切割字符串“info:xiaoZhang 33 shandong”
