[問題] 利用 regex 來不包含某些 pattern

看板Python作者 (天真紅)時間8年前 (2017/05/18 15:21), 8年前編輯推噓0(006)
留言6則, 2人參與, 最新討論串1/1
標題有點不知道怎下... (使用 python3 ) 我想要把字串中,英文和數字「以外」的字都取代掉, 但同時又要保留某些含有英或數字「以外」的 pattern。 大概像這樣: (保留 "+1" 和 "8+9") s = "123天0氣0真0好+1 ab++cd8+9abcd" new_s = re.sub("....","_",s) # new_s = "123_0_0_0_+1_ab_cd8+9abcd" 排除英數以外的應該沒有什麼問題: re.sub("[^a-zA-Z0-9]+","_",s) 但沒辦法保留有英數字的pattern,查了一下似乎可以使用 (?!...) (?!\+1|8\+9) 但仍舊沒有成功QQ 想問一下要怎麼改才對? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.149.191 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1495092073.A.0F9.html ※ 編輯: NaiveRed (101.13.149.191), 05/18/2017 15:21:46

05/18 16:42, , 1F
這個單純用 re 會太麻煩, 而且我猜你真正的需求不太一樣
05/18 16:42, 1F

05/18 16:55, , 2F
可以這樣做 http://d.pr/1tENW
05/18 16:55, 2F
感謝~ 原來有 Scanner 這東西!!!在 python3 doc 沒看到的說。

05/18 16:57, , 3F
([^\d+|\W+|a-z]+| +)
05/18 16:57, 3F

05/18 16:58, , 4F

05/18 17:02, , 5F
+ 沒有抓到, 另外加 |\+[^0-9] 應該就可以了
05/18 17:02, 5F

05/18 17:44, , 6F
btw, 如果要 escape \t\r\n 之類的話把 | + 改成 |\s+
05/18 17:44, 6F
感謝~ 這網站真不錯XD ※ 編輯: NaiveRed (134.208.56.141), 05/18/2017 19:28:32 ※ 編輯: NaiveRed (134.208.56.141), 05/18/2017 19:50:47
文章代碼(AID): #1P7Kjf3v (Python)