Python正則表達式如何刪除代碼行
Python正則表達式在Python語言中有很廣泛的應用范圍,我們不能更好的使用時因為沒有了解到他的真諦。其實我們只有更好的學習才能不斷的完善在今后的使用。
Python正則表達式(Regular Expression,簡稱Regex),是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串。正則表達式是一種處理文本的強大工具,刪除代碼行號對于它來講是小菜一疊。代碼如下:
- import re #導入Python的正則表達式模塊
- def CutLineNum (inStr):
- multiStr = inStr.splitlines(1) outStr = u''
- p = re.compile(r'\D*\d+\s?[.|:|\]|\)]?\s?') #編譯正則表達式
- for singleLine in multiLine: outStr += p.sub( '', singleLine,
count = 1 ) #用空字符替換每行的***個匹配上述正則表達式的字符串- eturn outStr #返回累加后的字符串
以上代碼中的咖色部分就是一個Regex,它的含義是:0或多個非數字字符 + 至少1個數字字符 + 0或1個空白字符 + 0或1個分隔符(包括點、冒號、右圓/方括號,可添加其他分隔符) + 0或1個空白字符。
以上Regex符合大多數代碼前行號的規則,刪除行號就是用空字符替換掉每行代碼中***個匹配該Regex的字符串(注意只能是***個,因為程序里可能會存在abc1.open等情況,如果全部匹配就會誤刪代碼)。
繼續優化——采用函數編程
看起來還不夠簡潔,沒關系,Python正則表達式是一種“準”函數編程(Functional Programming,FP)語言,做這種簡化代碼的事情最拿手。在這里,我用到了兩種函數編程手段——匿名函數(lambda)和一種高階函數(map),將代碼簡化至一行,如下:
- import re #導入Python的正則表達式模塊
- outStr = ''.join(map(lambda x:re.compile(r'\D*\d+\s?[.
|:|\]|\)]?\s?').sub( '', x,count = 1 ),inStr.splitlines(1))))
以上就是對Python正則表達式的詳細介紹。這樣代碼就只優化到了一行了,是不是很簡潔呢?當然代碼的可讀性受到一定影響。所以函數編程不能濫用。(濫用的例子可以見我的文章《學習Python列表內涵:一行代碼搞定雙倍超立方數計算》)。函數編程是個稍微復雜點的問題,我覺得掌握與否均可,所以就不很詳細地去解釋上述代碼了。
【編輯推薦】