1. 程式人生 > >python之(re)正則表達式上

python之(re)正則表達式上

文件 port 正則表達式 操作 數字 一次 空白 下劃線 應該

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)正則表達式上