剛開始入門,很多東西不明白。把這些可能很傻瓜式的不明白寫下來。
問題1:在寫pattern時為什麼字串前面要加個r,其實也就是這個問題,那不加r是不是也可以。就是不知道加r有什麼作用。在python有乙個擁有全部功能的正規表示式物件,函式為re.compile(pattern, flags),我尋求方便,就直接用乙個簡體版。所用的**我只用了乙個函式re.match(pattern, string, flags)。引數pattern就是你要寫正規表示式,如果匹配成功,就返回乙個__match,否則返回乙個none。我在官方文件時看寫的那些示例,有時會用r有時又不用,好吧,我終於有點開始頓悟了。第二個引數string就是你要匹配的字串,第三個引數flags用來控制正規表示式匹配的方式。flags這個值是re模組中定義的常量,你可以用位運算子「|」同時設定幾個標誌。
好的現在我開始我的疑惑,對於高手就一笑置之吧!寫到這裡,我算是弄明白我的疑惑在**了,c的轉義字元與正規表示式中的特殊匹配字元,這應該是我疑惑的地方。這可能就是好奇為什麼需要在字串前面加上r的地方。
import re
text = "hell\d"
m = re.match("^[a-z]\d$", text)
if m:
print(m.group(0))
else:
print("not match")
這段**上匹配不會成功。首先,pattern部分沒有加r,那麼就不是raw字串,有後斜劃線,在c中轉義字元是以後斜劃線開始的,後面接乙個d字元,'\d'沒有相應的轉義,故pattern部分傳給正規表示式引擎的也是"^[a-z]\d"這個字串,而匹配的字串是"hell\d",相應的\d也是沒有轉義,說明這是有5個字元,而pattern匹配的是前4個字元是字母,以乙個數字結尾,不滿足。
import re
text = "a\3"
m = re.match("a\\d", text)
if m:
print(m.group(0))
else:
print("not match")
這個也是不會匹配的,pattern部分會按c轉義字元,最後pattern傳給正規表示式引擎的是r"a\d",那匹配成功的字串應該是"a3",而要匹配的字串是"a\3",當然不會成功啊。好吧,我估計我明白pattern部分為什麼要用raw字串了。不知道我的想法是否正確。
正規表示式一點迷惑
正規表示式很強大,當然,也很複雜,我看到有本書專門講這個,不過內容沒看,沒耐心。我看的是 30分鐘精通正規表示式 當然,訖今已經不知道看了多少個30分鐘了,還是搞不懂一些基本問題,比如這個 var match regex.match 0px 0 d px console.writeline matc...
python正規表示式( )(一)
2.常見語法 寫在正規表示式裡面的普通字元都是表示 直接匹配它們。比如 你下面的文字中,如果你要找所有的test,正規表示式就非常簡單,直接輸入test即可 漢字也是一樣,要尋找漢字,直接寫正規表示式裡面就可以了 但是有些特殊字元,術語叫metacharacters 元字元 它們出現在正規表示式字串...
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...