如何理解Python中的正則表達式(2)
今天小編要跟大家分享的文章是如何理解Python中的正則表達式(2)?上節課我們簡單認識了一下Python中的正則表達式,這節課我們繼續了解Python正則表達式的相關內容,Python入門新手和正在Python學習的小伙伴快來看一看吧,希望能夠對大家有所幫助 !
今天為大家解決上節課中的部分疑問,比如r代表什么,來一起學習吧:
有同學問起昨天那段測試代碼里的問題,我來簡單說一下。
1.
r"hi"
這里字符串前面加了r,是raw的意思,它表示對字符串不進行轉義。為什么要加這個?你可以試試print "\bhi"和r"\bhi"的區別。
>>> print "\bhi" hi >>> print r"\bhi" \bhi
可以看到,不加r的話,\b就沒有了。因為Python的字符串碰到“\”就會轉義它后面的字符。如果你想在字符串里打“\”,則必須要打“\\”。
>>> print "\\bhi" \bhi
這樣的話,我們的正則表達式里就會多出很多“\”,讓本來就已經復雜的字符串混亂得像五仁月餅一般。但加上了“r”,就表示不要去轉義字符串中的任何字符,保持它的原樣。
2.
re.findall(r"hi", text)
re是Python里的正則表達式模塊。findall是其中一個方法,用來按照提供的正則表達式,去匹配文本中的所有符合條件的字符串。返回結果是一個包含所有匹配的list。
3.
今天主要說兩個符號“.”和“*”,順帶說下“\S”和“?”。
“.”在正則表達式中表示除換行符以外的任意字符。在上節課提供的那段例子文本中:
Hi, I am Shirley Hilton. I am his wife.
如果我們用“i.”去匹配,就會得到
['i,', 'ir', 'il', 'is', 'if']
你若是暴力一點,也可以直接用“.”去匹配,看看會得到什么。
與“.”類似的一個符號是“\S”,它表示的是不是空白符的任意字符。注意是大寫字符S。
4.
在很多搜索中,會用“?”表示任意一個字符,“*”表示任意數量連續字符,這種被稱為通配符。但在正則表達式中,任意字符是用“.”表示,而“*”則不是表示字符,而是表示數量:它表示前面的字符可以重復任意多次(包括0次),只要滿足這樣的條件,都會被表達式匹配上。
結合前面的“.*”,用“I.*e”去匹配,想一下會得到什么結果?
['I am Shirley Hilton. I am his wife']
是不是跟你想的有些不一樣?也許你會以為是
['I am Shirle', 'I am his wife']
這是因為“*”在匹配時,會匹配盡可能長的結果。如果你想讓他匹配到最短的就停止,需要用“.*?”。如“I.*?e”,就會得到第二種結果。這種匹配方式被稱為懶惰匹配,而原本盡可能長的方式被稱為貪婪匹配。
最后留一道習題:
從下面一段文本中,匹配出所有s開頭,e結尾的單詞。
site sea sue sweet see case sse ssee loses.
恭喜你在Python的道路上又堅持了一天,將我們的每節課中的每一個案例都進行實際操作練習,還可以再找些其他練習進行實踐操作,你就會理解、掌握他們哦。
以上就是小編今天為大家分享的關于如何理解Python中的正則表達式(2)的文章,希望本篇文章能夠對正在 Python學習?和從事Python相關工作的小伙伴們有所幫助,想要了解更多相關知識記得關注馬哥教育官網。最后祝愿小伙伴們工作順利!
免責聲明:內容和圖片源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。