看板 RegExp 關於我們 聯絡資訊
※ 引述《godspeedlee (妳,我可以)》之銘言: ※ 引述《squalll (追求夢想~)》之銘言: : 沒想到還會回來回這一篇.... : 最近才發現這樣寫有些資料有問題 : 因為資料欄位中不一定會有資料, : 最後一個欄位如果是空白的話這樣輸出就會錯誤 : 12345a345cd2187ankjdkj219zxnmzxn2109890 : 123 j12345mc1235987ccccc aaaaxxxxxxx : 12344123222 123ascv : 這樣到第三筆輸出的時候會變得很奇怪 : 預期應該會變成 : 12345,a345cd,2187ankjdkj219,zxnmzxn,2109890 : 123 ,j12345,mc1235987ccccc, aaaa,xxxxxxx : 12344,123222,,123ascv, : 但是實際上第三筆資料會變成 : 12344123222,123ascv之類的.. : 我的REGEXP目前是這樣寫 : foreach $thing (@list){ : $thing =~ s/(.{5})(.{6})(.{7})(.{8})(.{9})/$1,$2,$3,$4,$5/; : .... : } : 主要應該是因為s/match一串非空白字元,並以找到的字串為結尾 : 所以當我最後一欄資料為空白的時候就會發生錯誤了 : 不知道有沒有人遇過類似的問題? 該如何解決呢 : 我的資料是連續的..該怎麼寫才可以取出度定長度的值(包含空白) : 謝謝m(_ _)m 你上一篇說資料是以空白作為分隔,那你可以把它當成 csv,然後每讀進 一行就套用下面這個 pattern: (\s 指的是空白字元, \S 是非空白字元) \G(?:^|\s+)(\S+) 個人覺得這樣還比較簡單些,不過這次您貼出來的資料範本有些空白又消失不見了? 還請您對您的資料變化規律多描述一些,大夥才幫得上忙 -- http://godspeedlee.myweb.hinet.net/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.96.249
squalll:本來資料是有空白為分隔,後來發現沒有,資料是黏再一起的 10/03 07:48
squalll:但是長度是固定的,但是有的欄位資料是空白的 10/03 07:48
有的資料欄位是空白的?有一種情況是最簡單的,也有機會用 regex 處理掉,就是會消失的欄位是尾部,那就可以用下面這招 # free spacing mode, and remove all space from input line ^((.{5})(.{6})(.{7})(.{8})(.{9})| (.{5})(.{6})(.{7})(.{8})| (.{5})(.{6})(.{7})| (.{5})(.{6})| (.{5}))$ 假如會消失的欄位是5,6,7,8,9中任一個且不定數量,那就非常難解了, 舉例來說只剩 6,7 或 5,8 兩者相加的長度都是13,那請問我是要用 (.{6})(.{7}) 還是 (.{5})(.{8}) 去比對才是對的?更何況求出所有排列組合的 regex pattern 應該長到嚇死人,還不如不用 不過假如每個欄位的資料具備某些特色(不光是長度),那就可能還有解, 不知道您方不方便公開部份的資料內容,讓大家幫您想一想解法? (12345a345cd2187ankjdkj219zxnmzxn2109890 這看起來是隨手亂打的, 應該不是您真正的資料內容吧?) -- http://godspeedlee.myweb.hinet.net/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.97.6
squalll:沒想到還可以用|來當OR使用,他中間如果沒資料也回存空白 10/04 07:46
squalll:但是最後一筆如果沒資料,他就直接結束了,導致我的regex錯 10/04 07:47
squalll:誤,利用|應該就可以解決了(因為我現在是用if else判斷長度 10/04 07:48
squalll:來決定要用哪一個regex...真是有點蠢XD 謝謝讓我多學一招 10/04 07:49
squalll:因為原始資料太長..Orz 不然我很願意貼上來看是不是有更好 10/04 07:50
squalll:的寫法...:p 10/04 07:51
godspeedlee:嗯,我大概懂你的意思了,那些「消失的欄位」,假如是夾 10/04 13:52
godspeedlee:在{5}...{9}之間,並且「空白字元的長度」與沒有空白 10/04 13:52
godspeedlee:時一樣,那我給你的解法就是答案了(不知道有無猜錯?) 10/04 13:53
godspeedlee:假如是如此,那移除尾部的空白字元就好了 10/04 14:07