精華區beta RegExp 關於我們 聯絡資訊
各位,大家好,有個問題前來請教。 我的資料長的像這樣: abc,123,xyz,"123,456",def12 其使用逗號來分隔,但資料內容如有逗號時,則以"(雙引號)匡住,我想請問要下 什麼 RegExp 才能將資料中的「"123,456"」取代成「123456」呢? 簡言之,我想要讓資料: abc,123,xyz,"123,456",def12 變成 abc,123,xyz,123456,def12 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.245.24
supertitler:先將引號中的逗號拿掉,再將引號都拿掉,以javascript 08/21 03:12
supertitler:為例就是replace(/,(?=\w+")/g,"").replace(/"/g,"") 08/21 03:12
blc:s/"\(\d+\),\(\d+\)"/\1\2/ 08/21 14:49
> -------------------------------------------------------------------------- < 作者: anxiouser (eric) 看板: RegExp 標題: Re: [問題] "123,456"(注意有雙引號)取代成123456 時間: Fri Aug 22 21:23:31 2008 兩位回覆的網友都很優秀,但資料是活的,若資料中像有"123,456,789" 這種資料,可能你們寫的 RegExp 會有問題哦(因為你們只考慮一個逗號)。 雙引號會有不定個數的逗號,且雙引號不一定在第四欄,例如: 這個在第四欄:abc,123,xyz,"123,456",def12 這個在第二欄:abc,"123,456",123,xyz,def12 這個有兩個雙引號:abc,"123,456",xyz,"223,456",def12 我為了這個問題煩好久了,快死掉了。 有人說 RegExp 很強,什麼字串都能玩,我隨便出一題就掛了。 註:這個不是「作業文」也不是「接Case做不出來」文,這個程式我自己寫好玩的。 ※ 引述《anxiouser (eric)》之銘言: : 各位,大家好,有個問題前來請教。 : 我的資料長的像這樣: : abc,123,xyz,"123,456",def12 : 其使用逗號來分隔,但資料內容如有逗號時,則以"(雙引號)匡住,我想請問要下 : 什麼 RegExp 才能將資料中的「"123,456"」取代成「123456」呢? : 簡言之,我想要讓資料: : abc,123,xyz,"123,456",def12 : 變成 : abc,123,xyz,123456,def12 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.245.24 ※ 編輯: anxiouser 來自: 61.216.245.24 (08/22 21:25) ※ 編輯: anxiouser 來自: 61.216.245.24 (08/22 21:28)
PsMonkey:資料是活的是吧... 那我建議你直接用程式操作,不要用 RE 08/22 21:28
anxiouser:monkey 先生說的有道理。 08/22 21:30
※ 編輯: anxiouser 來自: 61.216.245.24 (08/22 21:31)
LPH66:純回最後一句: 其實RE比起CFL來還是差了一些XD 08/22 21:31
PsMonkey:另外也建議你語氣注意一下.... [逃] 08/22 21:34
blc:s/"\([^"]*\),\([^"]*\)"/\1\2/g [recursive] 08/22 22:41
badwork:有沒有搞錯啊 你第一篇給的是死的資料啊 08/23 00:03
badwork:也許你那顆活的逗號會長大變成全形的, 08/23 00:04
badwork:"我隨便出一題就掛了" 看來像是對自己說的 但其它人看起來 08/23 00:06
badwork:難免會錯意像是 "我隨便出一題就考倒你們了" 的感覺 08/23 00:07
sasbluesea:感覺dfa一定畫的出來... 08/24 11:06
> -------------------------------------------------------------------------- < 作者: anxiouser (eric) 看板: RegExp 標題: Re: [問題] "123,456"(注意有雙引號)取代成123456 時間: Sat Aug 23 17:24:14 2008 本來我的出發點就是想「一句RE搞定」,自己寫不出來,才來此地請教,後來覺的 好像沒辦法一句做完所有事,所以才會說出對 RE 失望的話。 我指的是 RE 這個東西,從頭到尾都沒講到人,也沒指名到姓? 這樣說,不知道自尊心強的網友們氣消了沒? 這個問題最後採用 psmonkey 先生的方法,我用迴圈去解析,但這樣用 s/.../.../g 使用 g 參數會有問題,這個地方是瓶頸,我把它點出來 ,這裡是 RE 版,所以我就不貼程式碼了(免得又被一堆人吐)。 我用的是 perl,RE語法是: s/"(.*?),(.*?)"/"$1$2"/ 以及 s/"(.*?),(.*?)"/$1$2/ 完成,要放迴圈裡面。 由於這個不是作業文,是我在玩,在學,所以繼續問下去... 虛心請教一下 blc 先生,你的 RE 是在什麼工具或程式語言使用,因為和我 學的有些出入,你會寫: \(.*?\),但我學的是 (.*?)。 至於你噓的那句: s/"\([^"]*\),\([^"]*\)"/\1\2/g 假如不會把資料: abc,"123,456,789,123,456.2938",5,"223,456",xyz 中,「",5,"」拿來解析,我想亦可以解決問題,因為我沒拿你的RE來試,沒有答案 ,不敢保證,有興趣的網友可以試試。(他有提到用遞迴) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.240.120
HowLeeHi:()前面有反斜線\應該只是escape的作用而已..脫逸shell... 08/23 18:05