我想从带有字符串的列表中提取数字

我有一个包含字符串的列表:list = ['string', 'string', 'string', ...]

这些字符串就像:'NumberDescription 33.3'

我只想提取没有'NumberDescription' part.


我已经尝试使用正则表达式和使用 re.match 的过滤器功能。但这会导致一个空列表。


dat_re = re.compile(r'\d+.\d')  

dat_list = list(filter(dat_re.match, list))

正如我所说,我只想要列表中的数字,在最后一步中,我想将列表中的元素转换为浮点数。


四季花海
浏览 181回答 3
3回答

富国沪深

这里有几点:使用re.searchsincere.match仅在字符串 start 处搜索匹配,转义点,因为它是一个特殊的正则表达式元字符您仅使用 过滤列表filter(...),不提取值。如果您打算找到第digit+.digit+一次出现,您可以使用正则表达式\d+\.\d+如果您的项目都是用于获取数字的string number格式s.split()[-1],则不需要正则表达式利用dat_list = [float(dat_re.search(x).group()) for x in l if dat_re.search(x)]或者,如果格式是固定的dat_list = [float(x.split()[-1]) for x in l]请参阅Python 演示:import rel = ['string 23.3', 'NumberDescription 33.35']dat_re = re.compile(r'\d+\.\d+')dat_list = [float(dat_re.search(x).group()) for x in l if dat_re.search(x)]print(dat_list)# => [23.3, 33.35]print([float(x.split()[-1]) for x in l])# => [23.3, 33.35]

眼眸繁星

直接从列表中提取浮点值:import rel = ['string 23.3', 'string 33.35', 'string 44.55']dat_list = list(float(match.group(1)) for match in map(re.compile('(\d+\.\d+)').search, l))print(dat_list)输出: [23.3, 33.35, 44.55]

精慕HU

list_strings=['1','2','3']for i in list_strings:    num_list.append(int(i))orlist_num = [int(x) for x in list_strings]检查此示例代码一次。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python