成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python大佬養(yǎng)成計(jì)劃----正則表達(dá)式

aikin / 1914人閱讀

摘要:正則模塊使語(yǔ)言擁有全部的正則表達(dá)式功能。函數(shù)根據(jù)一個(gè)模式字符串和可選的標(biāo)志參數(shù)生成一個(gè)正則表達(dá)式對(duì)象。該對(duì)象擁有一系列方法用于正則表達(dá)式匹配和替換。表示或者匹配項(xiàng)未找到匹配項(xiàng)匹配項(xiàng)未找到匹配項(xiàng)

正則

re = regular experssion
re 模塊使 Python 語(yǔ)言擁有全部的正則表達(dá)式功能。
compile 函數(shù)根據(jù)一個(gè)模式字符串和可選的標(biāo)志參數(shù)生成一個(gè)正則表達(dá)式對(duì)象。該對(duì)象擁有一系列方法用于正則表達(dá)式匹配和替換。

作用: 對(duì)于字符串進(jìn)行處理, 會(huì)檢查這個(gè)字符串內(nèi)容是否與你寫(xiě)的正則表達(dá)式匹配

如果匹配, 拿出匹配的內(nèi)容;
如果不匹配, 忽略不匹配內(nèi)容;

編寫(xiě)正則的規(guī)則

pattern 匹配的正則表達(dá)式
string 要匹配的字符串
三種查找方法
1). findall
import re

str = "hello sheen,hello cute."

pattern_1 = r"hello"
pattern_2 = r"sheen"
print(re.findall(pattern_1,str))    #["hello", "hello"]
print(re.findall(pattern_2,str))    #["sheen"]
2).match

match嘗試從字符串的起始位置開(kāi)始匹配,

如果起始位置沒(méi)有匹配成功, 返回一個(gè)None;

如果起始位置匹配成功, 返回一個(gè)對(duì)象;

import re

str = "hello sheen,hello cute."

pattern_1 = r"hello"
pattern_2 = r"sheen"
print(re.match(pattern_1,str))           #<_sre.SRE_Match object; span=(0, 5), match="hello">
print(re.match(pattern_1,str).group())   #返回match匹配的字符串內(nèi)容,hello
print(re.match(pattern_2,str))           #None
3).search

search會(huì)掃描整個(gè)字符串, 只返回第一個(gè)匹配成功的內(nèi)容;

如果能找到, 返回一個(gè)對(duì)象, 通過(guò)group方法獲取對(duì)應(yīng)的字符串;

import re

str = "hello sheen,hello cute."

pattern_1 = r"hello"
pattern_2 = r"sheen"
print(re.search(pattern_1,str))             #<_sre.SRE_Match object; span=(0, 5), match="hello">
print(re.search(pattern_1,str).group())     #hello
print(re.search(pattern_2,str))             #<_sre.SRE_Match object; span=(6, 11), match="sheen">
print(re.search(pattern_2,str).group())     #sheen
特殊字符類
.: 匹配除了
之外的任意字符; [.
]
d:  digit--(數(shù)字), 匹配一個(gè)數(shù)字字符, 等價(jià)于[0-9]
D: 匹配一個(gè)非數(shù)字字符, 等價(jià)于[^0-9]
s:  space(廣義的空格: 空格, 	, 
, 
), 匹配單個(gè)任何的空白字符;
S:  匹配除了單個(gè)任何的空白字符;
w:  字母數(shù)字或者下劃線, [a-zA-Z0-9_]
W: 除了字母數(shù)字或者下劃線, [^a-zA-Z0-9_]
import re

# .
print(re.findall(r".","sheen
star
"))     #["s", "h", "e", "e", "n", "s", "t", "a", "r"]

#d#D
print(re.findall(r"d","當(dāng)前聲望30"))       #["3", "0"]
print(re.findall(r"D","當(dāng)前聲望30"))       #["當(dāng)", "前", "聲", "望"]

#s#S
print(re.findall(r"s", "
當(dāng)前
聲望	為30"))     #["
", "
", "	"]
print(re.findall(r"S", "
當(dāng)前
聲望	為30"))     #["當(dāng)", "前", "聲", "望", "為", "3", "0"]

#w#W
print(re.findall(r"w","lucky超可愛(ài)!!"))           #["l", "u", "c", "k", "y", "超", "可", "愛(ài)"]
print(re.findall(r"W","lucky超可愛(ài)!!"))           #["!", "!"]

指定字符出現(xiàn)次數(shù)

匹配字符出現(xiàn)次數(shù):

*: 代表前一個(gè)字符出現(xiàn)0次或者無(wú)限次;    d*,  .*
+: 代表前一個(gè)字符出現(xiàn)一次或者無(wú)限次;     d+
?: 代表前一個(gè)字符出現(xiàn)1次或者0次;   假設(shè)某些字符可省略, 也可以不省略的時(shí)候使用

第二種方式:

{m}: 前一個(gè)字符出現(xiàn)m次;
{m,}: 前一個(gè)字符至少出現(xiàn)m次;  * == {0,}; + ==={1,}
{m,n}: 前一個(gè)字符出現(xiàn)m次到n次; ? === {0,1}

import re

#* 代表前一個(gè)字符出現(xiàn)0次或者無(wú)限次
print(re.findall(r"s*","sheenstar"))        #["s", "", "", "", "", "s", "", "", "", ""]
print(re.findall(r"s*","hello"))            #["", "", "", "", "", ""]

#+ 代表前一個(gè)字符出現(xiàn)一次或者無(wú)限次
print(re.findall(r"s+","sheenstar"))        #["s", "s"]
print(re.findall(r"s+","hello"))            #[]

# ? 代表前一個(gè)字符出現(xiàn)1次或者0次
print(re.findall(r"188-?", "188 6543"))     #["188"]
print(re.findall(r"188-?", "188-6543"))     #["188-"]
print(re.findall(r"188-?", "148-6543"))     #[]


# 匹配電話號(hào)碼
pattern = r"d{3}[s-]?d{4}[s-]?d{4}"
print(re.findall(pattern,"188 0123 4567"))      #["188 0123 4567"]
print(re.findall(pattern,"188-0123-4567"))      #["188-0123-4567"]
print(re.findall(pattern,"18801234567"))        #["188-0123-4567"]
練習(xí)--匹配IP

可以從網(wǎng)上搜索正則表達(dá)式生成器,使用別人寫(xiě)好的規(guī)則,自己測(cè)試。

import re

# | 表示或者
pattern = r"(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d).(25[0-5]|2[0-4]d|[0-1]d{2}|[1-9]?d)$"

print(re.findall(pattern,"172.25.254.34"))  #[("172", "25", "254", "34")]

matchObj_1 = re.match(pattern,"172.25.254.34")
if matchObj_1:
    print("匹配項(xiàng):",matchObj_1.group())                     #172.25.254.34
else:
    print("未找到匹配項(xiàng)")

matchObj_2 = re.match(pattern,"172.25.254.343")
if matchObj_2:
    print("匹配項(xiàng):",matchObj_2.group())                     
else:
    print("未找到匹配項(xiàng)")

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44827.html

相關(guān)文章

  • python大佬養(yǎng)成計(jì)劃----flask應(yīng)用(表單)

    摘要:特別是可以訪問(wèn)請(qǐng)求提交的表單數(shù)據(jù)。表單的代碼生成和驗(yàn)證提交的表單數(shù)據(jù)就是兩個(gè)很好的例子。優(yōu)勢(shì)擴(kuò)展使得處理表單能獲得更愉快的體驗(yàn)。設(shè)計(jì)了表單庫(kù)來(lái)使可以更加簡(jiǎn)便地管理操作表單數(shù)據(jù)。 1. 為什么使用Flask-WTF? request對(duì)象公開(kāi)了所有客戶端發(fā)送的請(qǐng)求信息。特別是request.form可以訪問(wèn)POST請(qǐng)求提交的表單數(shù)據(jù)。 盡管Flask的request對(duì)象提供的支持足以處理w...

    alighters 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----Django圖書(shū)人物適配系統(tǒng)(前端)

    摘要:兩者相同的地方是都可以將一個(gè)普通函數(shù)變成視圖函數(shù)。不同的是,使用裝飾器定義路由,而使用正則表達(dá)式定義路由。中間什么都沒(méi)有,表示這個(gè)正則匹配的是根目錄,。最后修改的網(wǎng)頁(yè)顯示如圖項(xiàng)目框架圖 Django添加路由 與flask一樣,django也需要使用路由將URL與服務(wù)端要執(zhí)行的代碼關(guān)聯(lián)。 兩者相同的地方是都可以將一個(gè)普通函數(shù)變成視圖函數(shù)。不同的是,flask使用裝飾器@app.route...

    amuqiao 評(píng)論0 收藏0
  • python大佬養(yǎng)成計(jì)劃----HTML DOM

    摘要:定義了所有元素的對(duì)象和屬性,以及訪問(wèn)它們的方法。換言之,是關(guān)于如何獲取修改添加或刪除元素的標(biāo)準(zhǔn)。根據(jù)標(biāo)準(zhǔn),中所有內(nèi)容都是節(jié)點(diǎn)。好比我有兩個(gè)下拉列表,第一列表是選擇省份,那么我選擇某一個(gè)省份,那么另一個(gè)列表也會(huì)對(duì)應(yīng)顯示該省份的城市。 什么是DOM? DOM (Document Object Model) 譯為文檔對(duì)象模型,是 HTML 和 XML 文檔的編程接口。HTML DOM 定義了...

    leejan97 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

aikin

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<