python之(re)正則表達式上
python正則表達式知識預備
正則表達式使用反斜杠" \ "來代表特殊形式或用作轉義字符,這裏跟Python的語法沖突,因此,Python用" \\\\ "表示正則表達式中的" \ ",因為正則表達式中如果要匹配" \ ",需要用\來轉義,變成" \\ ",而Python語法中又需要對字符串中每一個\進行轉義,所以就變成了" \\\\ "。
上面的寫法是不是覺得很麻煩,為了使正則表達式具有更好的可讀性,Python特別設計了原始字符串(raw string),需要提醒你的是,在寫文件路徑的時候就不要使用raw string了,這裏存在陷阱。raw string就是用‘r‘作為字符串的前綴,如 r"\n":表示兩個字符"\"和"n",而不是換行符了。Python中寫正則表達式時推薦使用這種形式。
問題:如何匹配到‘\com’
# r9 = re.search(‘\\\\‘, ‘www.run\comoob‘) # print(r9) #匹配到‘\’ ‘\\\\‘ python 將其翻譯為‘\\‘ re 模塊將其編譯為‘\‘
上面太麻煩了,明顯不符合實際操作,看下面的:
r10 = re.search(r‘\\com‘, ‘www.run\comoob‘) #加r , 表示python 不翻譯,re 翻譯 print(r10)
#f = open("c:\abc.txt") #錯誤 應該是f = open("c:\\abc.txt") r7 = re.search(r‘\\com‘, ‘www.run\comoob‘) #註意:匹配到‘\com‘ 翻譯到屏幕是‘\\com‘ print(r7)
學習正則表達式
接下來系統學習正則表達式,文章有點長,希望不懂的同學可以耐心看下去,我會多舉例的
先大致看下,後面會舉例:
字符:
. 匹配除換行符以外的任意字符
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
次數:
* 重復零次或更多次
+ 重復一次或更多次
? 重復零次或一次
{n} 重復n次
{n,} 重復n次或更多次
{n,m} 重復n到m次
正則表達式本身就是小型編程語言,使用之前肯定要先導入啦,下面實例默認都是導入的。
一、了解findout,及字符
1. findout 把匹配結果通過列表返回
r =re.findall(‘zcl‘, ‘fzclfjfrijzclfeizcfj‘) print(r) #[‘zcl‘, ‘zcl‘]
2. . 匹配到除換行符以外的任一個字符
r1 =re.findall(‘z.l‘, ‘fzolfjfrijzclfeizcfj‘) print(r1) #[‘zol‘, ‘zcl‘] r1 =re.findall(‘z.l‘, ‘fz\nlfjfrijzclfeizcfj‘) print(r1) #[‘zcl‘]
3. ^ (shift+6)區配到以 xx字符開頭
r2 =re.findall(‘^z.l‘, ‘fz\nlfjfrijzclfeizcfj‘) print(r2) #[] r3 =re.findall(‘^z.l‘, ‘zcllfz\nlfjfrijzclfeizcfj‘) print(r3) #[‘zcl‘]
4. $ 匹配到以xx結束的字符
r4 =re.findall(‘z.l$‘, ‘zcllfz\nlfjfrijzclfeizcfj‘) print(r4) #[] r5 =re.findall(‘z.l$‘, ‘zcllfz\nlfjfrijzclfeizcfjzcl‘) print(r5) #[‘zcl‘]
5. * 區配*前面的字符0到多次
+ 重復一次或更多次
r6 =re.findall(‘z.*l‘, ‘zcgfchthllfz\nlfjfrijzclfeizcfjzcl‘) print(r6) #[‘zcgfchthll‘, ‘zclfeizcfjzcl‘] r7 =re.findall(‘z.+l‘, ‘zcgfchthfz\nlfjfrijzcfeizcfjzc‘) print(r7) #[]
6. {n} 重復n次
{n,m} 重復n到m次
{n,} 重復n次或更多次
r8 = re.findall(‘zc{3}l‘, ‘zccclgfchthfz\nlfjfrijzcfeizcfjzc‘) print(r8) #[‘zcccl‘]
7. [bc] 匹配b或c
r9 = re.findall(‘a[bd]c‘, ‘dfjabdcdjfabcdf‘) print(r9)
8. [a-z] 匹配a至z任意一個
r9 = re.findall(‘a[a-z]c‘, ‘dfjabdcdjfatcdf‘) print(r9) #[‘atc‘]
9. [] 裏面仍有功能有三個: [a-z] [\d]區配數字 [^] 非
r10 = re.findall(‘a[^f]d‘, "afd") print(r10) #[] r11 = re.findall(‘a[^f]d‘, "ard") print(r11) #[‘ard‘] r12 = re.findall(r‘a\df‘, "a8f") print(r12) #[‘a8f‘]
歡迎轉發!
This is zcl‘s article! Thanks for your support!
文章出處:http://www.cnblogs.com/0zcl
作者:zcl
python之(re)正則表達式上