Re: [問題] 全文取代 [提問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:02,
08/21 16:02
→
08/21 16:59,
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
08/21 22:40, 6F
討論串 (同標題文章)