python re.sub 應用
02-24
今天寫了一個正則表達式,用一條命令直接實現了要求,有點小激動。。
要求是把下邊這樣的配置腳本
rule name 64_40
description AAAAAA YYYYYY
rule name 65_80
description XXXXXXX
翻譯成
rule name YYYYYY_40
description AAAAAA YYYYYY
rule name XXXXXXX_80
description XXXXXXX
這樣就搞定了
result = re.sub(r(d+)_(d+.*?description.*?)(w+)(?=
),g<3>_g<2>g<3>,fullcontent,0,re.S)
中間有這麼幾個問題。
- 匹配描述(description)後邊最後的一段字元串。例如:XXXXXXX或YYYYYY。方法是使用這個:(w+)(?=
),這樣就能配置後邊是換行的一段字元串,AAAAAA後邊是空格的就匹配不上了。 - 將名字(name)裡邊的第一個數字替換成描述後邊最後一段字元串。就需要用到g<X>了。以前想到的還是先都匹配出來,再批量替換。現在不用了。
- 但是替換時還出現了一點問題。因為只想替換名字後邊的數字,但是又需要找到描述後邊的字元串,那麼就需要將中間那部分匹配出來,然後再放回去。。g<3>_g<2>g<3> 這裡邊g<3>就是最後的(w+), g<2>就是不想動的(d+.*?description.*?)。(好像g<0>是匹配到的所有字元串,但是沒試過)
- 剛開始忘了給count這個參數,就是0那個位置,結果每次只能替換前16項……
- (d+.*?description.*?) 這裡邊想找到數字後邊的第一個description之間的內容,要用 .*? ,如果用 .* 就會匹配數字後邊到最後一個description所有內容了。
推薦閱讀: