日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【Python 第56課】 正則表達(dá)式(2)20150120056

 一利陽光故事會 2020-02-24

【Python 第56課】 正則表達(dá)式(2)

有同學(xué)問起昨天那段測試代碼里的問題,我來簡單說一下。

1.
r"hi"

這里字符串前面加了r,是raw的意思,它表示對字符串不進(jìn)行轉(zhuǎn)義。為什么要加這個?你可以試試print "\bhi"和r"\bhi"的區(qū)別。
>>> print "\bhi"
hi
>>> print r"\bhi"
\bhi

可以看到,不加r的話,\b就沒有了。因為python的字符串碰到“\”就會轉(zhuǎn)義它后面的字符。如果你想在字符串里打“\”,則必須要打“\\”。
>>> print "\\bhi"
\bhi

這樣的話,我們的正則表達(dá)式里就會多出很多“\”,讓本來就已經(jīng)復(fù)雜的字符串混亂得像五仁月餅一般。但加上了“r”,就表示不要去轉(zhuǎn)義字符串中的任何字符,保持它的原樣。

2.
re.findall(r"hi", text)

re是python里的正則表達(dá)式模塊。findall是其中一個方法,用來按照提供的正則表達(dá)式,去匹配文本中的所有符合條件的字符串。返回結(jié)果是一個包含所有匹配的list。

3.
今天主要說兩個符號“.”和“*”,順帶說下“\S”和“?”。
“.”在正則表達(dá)式中表示除換行符以外的任意字符。在上節(jié)課提供的那段例子文本中:
Hi, I am Shirley Hilton. I am his wife.

如果我們用“i.”去匹配,就會得到
['i,', 'ir', 'il', 'is', 'if']

你若是暴力一點,也可以直接用“.”去匹配,看看會得到什么。

與“.”類似的一個符號是“\S”,它表示的是不是空白符的任意字符。注意是大寫字符S。

4.
在很多搜索中,會用“?”表示任意一個字符,“*”表示任意數(shù)量連續(xù)字符,這種被稱為通配符。但在正則表達(dá)式中,任意字符是用“.”表示,而“*”則不是表示字符,而是表示數(shù)量:它表示前面的字符可以重復(fù)任意多次(包括0次),只要滿足這樣的條件,都會被表達(dá)式匹配上。

結(jié)合前面的“.*”,用“I.*e”去匹配,想一下會得到什么結(jié)果?
['I am Shirley Hilton. I am his wife']

是不是跟你想的有些不一樣?也許你會以為是
['I am Shirle', 'I am his wife']

這是因為“*”在匹配時,會匹配盡可能長的結(jié)果。如果你想讓他匹配到最短的就停止,需要用“.*?”。如“I.*?e”,就會得到第二種結(jié)果。這種匹配方式被稱為懶惰匹配,而原本盡可能長的方式被稱為貪婪匹配。

最后留一道習(xí)題:
從下面一段文本中,匹配出所有s開頭,e結(jié)尾的單詞。

site sea sue sweet see case sse ssee loses

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多