作者CindyLinz (Cindy Wang)
看板RegExp
标题Re: [问题] 在Python匹配数字类似形式的编号
时间Sun Jul 5 23:12:42 2015
※ 引述《chuanmaotou (0xFFFFFFFF)》之铭言:
: 如题,我有数种字串需要批配
: 最原始的形式是长这样子的:133216-546
: 但因为原始资料的来源很多,可能有数种类似的形式
: 如:133216 546、133216--546、133216_546之类的形式
: 而除了这部分的资料外,部份资料可能会有一大串的hash值混杂在里面
: 像是这样945a24d21f5de98e_133216-546的形式
: 目前是用(\d{6}-\d{3})|(\d{6} \d{3})来处理,但只能handle两种形式
: 而且在Python下似乎回传值是一个list,代表这两种匹配的结果
: 不知道有什麽方法可以更有效的处理,让回传值更单纯?
只针对
(\d{6}-\d{3})|(\d{6} \d{3})
来看的话, 可以改成
(\d{6}[ -]\d{3})
刚好意思一样, 但只有一个 capture;
如果还是需要有好几个 | 隔开的话,
可以在它们的最外面放一组括号全部装起来, 像是
((\d{6}-\d{3})|(\d{6} \d{3}))
那麽, 虽然会拿到一个 list, 但是第 0 个总是你要的最後结果,
其他後面的不要管它就好 :p
如果是 perl 的 regex 的话还有这招可以用
(?|(\d{6}-\d{3})|(\d{6} \d{3}))
这个 (?| .... ) 叫作 branch reset,
装在里面的不同 branch,
其括号的顺序会重叠在一起这样...
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 112.121.80.249
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/RegExp/M.1436109164.A.439.html
※ 编辑: CindyLinz (112.121.80.249), 07/05/2015 23:13:23