作者s25g5d4 (function(){})()
看板RegExp
标题Re: [问题] [年月日...] 的 regular expression
时间Mon Aug 1 20:15:37 2016
※ 引述《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)
--
1F:→ eggimage:我之前也发生过很多次 yahoo本来就很烂 还外加奇摩12/10 18:52
2F:推 madeinchina:之前即时通死都不让我登入 後来我就改用MSN了...12/10 18:53
3F:→ eggimage:发现MSN也不给你登....12/10 18:53
4F:推 madeinchina: 就改登PTT了12/10 18:55
5F:→ eggimage:最近ptt也一直断....12/10 18:57
6F:→ freely10469: 只好掀桌出去裸奔了...12/10 19:57
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.117.198.141
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/RegExp/M.1470053740.A.CE5.html
※ 编辑: s25g5d4 (140.117.198.141), 08/01/2016 20:18:37
7F:→ mars90226: 这个感觉不错,不过如果要抓年月日的资料呢? 08/01 22:49
8F:→ mars90226: 好像只能用程式判断最後拿到的资料是年还是日 08/01 22:49
9F:→ ggirls: 真的很高兴有人可以教我如何思考。 08/02 09:38
10F:→ ggirls: 试着改写中。目前卡在我把三个"?:"拿掉,会得到错误结果。 08/02 09:40
11F:→ ggirls: 我的观念里,non-capturing group对结果不会引响,只是 08/02 09:41
12F:→ ggirls: 显性或隐性分组的分别吗? 08/02 09:42
13F:→ ggirls: 好像我的观念是错的。我用Python3.4。 08/02 09:42
14F:推 ggirls: 拿掉non-capturing我这边的结果是: 08/02 09:52
15F:推 ggirls: [('', '1月 1日', ' 1日'), (' 2年', ' 2月 2 日', ' 2 08/02 09:55
16F:→ ggirls: 日'), (' 3年', '3月', ''), ('', '', ''), (' 5年', '5 08/02 09:55
17F:→ ggirls: 月', ''), ('', '', ''), ('', '', '')] 08/02 09:55