python類庫31[Regex之sub]

來源:互聯網
上載者:User

執行個體在python2.6中測試通過,對python3.1需要相應的修改。 

 

將下面字串中的目錄替換為新的目錄c:\test\2011 或c:\test\2012。

Hello
dir=c:\test\2010
How are you!

 

一 使用Regex Match Tester來測試,如下:

 

 

二 程式碼範例 

import re

oldline = 'dir=c:\\test\\2010'
str1 = 'Hello\n' + oldline +'\nHow are you!'
print str1
print '------------------------------------'

newline = 'dir=c:\\test\\2011'

reobj = re.compile('^(dir=)(.*)$',re.M)  
newStr1 = reobj.sub(newline, str1 )
print newStr1
print '------------------------------------'

newdir = 'c:\\test\\2011'
def f(m):
  return m.group(1) + newdir  
newNewStr1 = reobj.sub(f, str1 )
print newNewStr1
print '------------------------------------'

 

三 運行結果

 

 

四 解析

1)使用re.compile來產生Regex對象reobj,且通過re.M來設定為多行匹配;
2)調用reobj的sub方法,sub方法的原型為RegexObject.sub(repl,string[,count=0]),其中repl可以為字串或函數,如果是字串時,字串中所有的\均被處理,例如\n表示新行,\r表示換行,\g<name> = \g<2> = \2表示前面匹配到的group(2),其他的沒有特殊意義的如\j則保持原樣;
3)如果repl為函數時,此函數只有一個參數為matchobject;

以上的問題中因為repl中有\2,所以必須使用函數來處理!

 

完!

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.