从捕获中排除符号并仅获取所需数据?

时间:2017-10-09 16:53:12

标签: regex go regex-group

我的文字有天,小时,分钟,格式如下:

    ball = random.choice([
        'It is certain',
        'As i see it, yes', 
        'Dont count on it', 
        'Without a doubt', 
        'Definitely', 
        'Very doubtful', 
        'Outlook not so good', 
        'My sources say no', 
        'My reply is no', 
        'Most likely', 
        'You may rely on it', 
        'Ask again later'
        ])

请注意,其中一些可能不存在(例如:4 d. 12 h. 32 m. 7 h. 22 m. 3 d. 14 h. 并不包含会议记录)

我想在命名组中捕获数字,但不捕获字符(d.h.m。)。所以最后我需要得到像这张地图的结果:

3 d. 14 h.

这就是我写的:[ 'days' => 4, 'hours' => 12, 'minutes' => 32, ]

链接:https://regex101.com/r/FERRnd/1

但似乎有一些空元素,我觉得这不是这项任务的最佳正则表达式。有没有办法只将指定的params作为数字而没有其他内容(没有空字段,没有(?P<days>(\d+) d.)?(?P<hours>(\d+) h.)?(?P<minutes>(\d+) m.)?之类的文本等)?

非常感谢!

2 个答案:

答案 0 :(得分:1)

尝试:

Ls

答案 1 :(得分:0)

如果您可以匹配空字符串,那么

akond的解决方案是有效的。在开头添加正向前瞻将阻止匹配空字符串:

(?=\d+\s[dhm]\.)(?:(?P<days>\d+) d.)?\s*(?:(?P<hours>\d+) h.)?\s*(?:(?P<minutes>\d+) m.)?