Re: [問題] [年月日...] 的 regular expression

作者: s25g5d4 (function(){})()   2016-08-01 20:15:37
※ 引述《ggirls》之銘言:
: 有時可以沒有年,有時可以沒有日,但若是「年-日」
: 就應拆分成兩個日期。
也就是
年月日
年月
月日



對吧
先分析一下 月 出現最多次
所以以月為主 pattern 而沒有月的當例外處理
可以寫成 (?:\s*\d+\s*年)?(?:\s*\d+\s*月(?:\s*\d+\s*日)?)
例外的兩個規則分別是 年 與 日
所以寫成 \s*\d+\s*[年日]
最後用 | 連起來
(?:\s*\d+\s*年)?(?:\s*\d+\s*月(?:\s*\d+\s*日)?)|\s*\d+\s*[年日]
我的執行結果:
> '1月 1日 2年 2月 2 日 3年3月 4年 5年5月 6年 7日'
.match(/(?:[0-9 ]+年)?(?:[0-9 ]+月(?:[0-9 ]+日)?)|[0-9 ]+[年日]/g)
[ '1月 1日', ' 2年 2月 2 日', ' 3年3月', ' 4年', ' 5年5月', ' 6年', ' 7日' ]
語言為 JavaScript (Node.js v6.2.1)
作者: mars90226 (火星人)   2016-08-01 22:49:00
這個感覺不錯,不過如果要抓年月日的資料呢?好像只能用程式判斷最後拿到的資料是年還是日
作者: ggirls (哥)   2016-08-02 09:38:00
真的很高興有人可以教我如何思考。試著改寫中。目前卡在我把三個"?:"拿掉,會得到錯誤結果。我的觀念裡,non-capturing group對結果不會引響,只是顯性或隱性分組的分別嗎?好像我的觀念是錯的。我用Python3.4。拿掉non-capturing我這邊的結果是:[('', '1月 1日', ' 1日'), (' 2年', ' 2月 2 日', ' 2日'), (' 3年', '3月', ''), ('', '', ''), (' 5年', '5月', ''), ('', '', ''), ('', '', '')]
作者: eggimage (目前沒有名片)   2016-12-10 18:52:00
我之前也發生過很多次 yahoo本來就很爛 還外加奇摩
作者: madeinchina (中國製造™)   2016-12-10 18:53:00
之前即時通死都不讓我登入 後來我就改用MSN了...
作者: eggimage (目前沒有名片)   2016-12-10 18:53:00
發現MSN也不給你登....
作者: madeinchina (中國製造™)   2016-12-10 18:55:00
就改登PTT了
作者: eggimage (目前沒有名片)   2016-12-10 18:57:00
最近ptt也一直斷....
作者: freely10469 (  ̄ (工)  ̄ )   2016-12-10 19:57:00
只好掀桌出去裸奔了...

Links booklink

Contact Us: admin [ a t ] ucptt.com