Re: [問題] 全文取代 [提問2]

看板Python作者 (荒圍!定厝!賊!妹!)時間10年前 (2013/08/21 18:21), 編輯推噓3(303)
留言6則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《play9091 (長工)》之銘言: 恕刪

08/21 14:51,
08/21 14:51

08/21 14:52,
在上面的代碼中,它可以實現,單筆置換。但全文失敗。
08/21 14:52

08/21 16:02,
我做了一些改動,但是最後一行還是錯了!
08/21 16:02


08/21 16:59,
最後我把它做成下面這樣子,不知道會不會有什麼隱憂
08/21 16:59

08/21 16:59,
鑒於不能讓新人一知半解的精神,只好來解釋三個連結的pattern有什麼差別。 雖然我這篇文講的東西在官方文件都有= = 首先,*跟+的行為都是 greedy 的, 這就是為何第一個連結會把 lset 也納入第三 group 裡, 因為 [^ ]* 包括換行,它只有遇到空白才會停下來,於是順便吃掉 lset。 若檢查一下檔案,僅加入會遇到的字元如 [\w,=$], 或是讓它不要 greedy ,就不會有看起來很奇怪的結果。 第二個連結最後一行也是一樣的道理,pattern 只有擋掉遇到空白後沒有換行的情形, 沒有擋掉沒遇到空白就直接結束的情形。 最後 (.*) 可以用的原因很簡單,就是.不包含換行。 這種做法當然會有隱憂,若檔案裡只有 lset 資料跟空白就爆炸了, 但解法也很容易,一樣不要 greedy 就 ok 了。 若檔案每行都只包含一組lset, 那原po需要的 pattern 只是 r'lset\s+(.*?)\s+(.*?)\s+(.*?)' 繞了一大圈,仔細想想還滿空虛的,都怪被 aaa bbb 誤導,以為只有word。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.194.13.159

08/21 18:44, , 1F
其實,您最後面說到的方法,我一開始就試了。結果是不行
08/21 18:44, 1F

08/21 18:46, , 2F
08/21 18:46, 2F
啊忘記\s包括換行,我改成非greedy了。 ※ 編輯: ck574b027 來自: 123.194.13.159 (08/21 20:31)

08/21 21:39, , 3F
加上問號後,的確可以了,但是最後一個匹配不用問號!
08/21 21:39, 3F

08/21 21:39, , 4F
08/21 21:39, 4F

08/21 21:45, , 5F
一直沒懂'問號'是怎麼用的?煩請指教……
08/21 21:45, 5F

08/21 22:40, , 6F
?就是叫*或+配越少字越好,不要greedy的意思。
08/21 22:40, 6F
文章代碼(AID): #1I59J5kG (Python)
討論串 (同標題文章)
文章代碼(AID): #1I59J5kG (Python)