推 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