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