字符串是編程時涉及到的最多的一種數(shù)據(jù)結(jié)構(gòu),對字符串進行操作的需求幾乎無處不在胞皱。比如判斷一個字符串是否是合法的Email地址熟菲,雖然可以編程提取@前后的子串,再分別判斷是否是單詞和域名朴恳,但這樣做不但麻煩抄罕,而且代碼難以復用。
正則表達式是一種用來匹配字符串的強有力的武器于颖。它的設(shè)計思想是用一種描述性的語言來給字符串定義一個規(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++相應(yīng)文章閱讀的次數(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)計耐齐、接口浪秘、后臺等服務(wù)器端相關(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(shè)計辕翰,了解設(shè)計模式</p>
<p>2夺衍、掌握HTTP協(xié)議,熟悉MVC喜命、MVVM等概念以及相關(guān)WEB開發(fā)框架</p>
<p>3沟沙、掌握關(guān)系數(shù)據(jù)庫開發(fā)設(shè)計,掌握 SQL壁榕,熟練使用 MySQL/PostgreSQL 中的一種<br></p>
<p>4矛紫、掌握NoSQL、MQ护桦,熟練使用對應(yīng)技術(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”