我的文字有天,小时,分钟,格式如下:
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.)?
之类的文本等)?
非常感谢!
答案 0 :(得分:1)
尝试:
Ls
答案 1 :(得分:0)
akond的解决方案是有效的。在开头添加正向前瞻将阻止匹配空字符串:
(?=\d+\s[dhm]\.)(?:(?P<days>\d+) d.)?\s*(?:(?P<hours>\d+) h.)?\s*(?:(?P<minutes>\d+) m.)?