python如何从字符串中提取数字_如何在Python中从字符串中提取数字?

我将提取字符串中包含的所有数字。 哪个更适合于目的,正则表达式或isdigit()方法?

例:

line = "hello 12 hi 89"

结果:

[12, 89]

#1楼

@jmnas,我很喜欢您的回答,但没有找到浮点数。 我正在处理一个脚本,以分析要送入CNC铣床的代码,并且需要查找可以是整数或浮点数的X和Y尺寸,因此我将代码修改为以下内容。 查找具有正值和负值的int,float。 仍然找不到十六进制格式的值,但是您可以在num_char元组中添加“ x”和“ A”至“ F”,我认为它将解析“ 0x23AC”之类的内容。

s = 'hello X42 I\'m a Y-32.35 string Z30'

xy = ("X", "Y")

num_char = (".", "+", "-")

l = []

tokens = s.split()

for token in tokens:

if token.startswith(xy):

num = ""

for char in token:

# print(char)

if char.isdigit() or (char in num_char):

num = num + char

try:

l.append(float(num))

except ValueError:

pass

print(l)

#2楼

这有点迟了,但是您也可以扩展regex表达式以说明科学符号。

import re

# Format is [(, ), ...]

ss = [("apple-12.34 ba33na fanc-14.23e-2yapple+45e5+67.56E+3",

['-12.34', '33', '-14.23e-2', '+45e5', '+67.56E+3']),

('hello X42 I\'m a Y-32.35 string Z30',

['42', '-32.35', '30']),

('he33llo 42 I\'m a 32 string -30',

['33', '42', '32', '-30']),

('h3110 23 cat 444.4 rabbit 11 2 dog',

['3110', '23', '444.4', '11', '2']),

('hello 12 hi 89',

['12', '89']),

('4',

['4']),

('I like 74,600 commas not,500',

['74,600', '500']),

('I like bad math 1+2=.001',

['1', '+2', '.001'])]

for s, r in ss:

rr = re.findall("[-+]?[.]?[\d]+(?:,\d\d\d)*[\.]?\d*(?:[eE][-+]?\d+)?", s)

if rr == r:

print('GOOD')

else:

print('WRONG', rr, 'should be', r)

一切都好!

#3楼

我发现的最佳选择如下。 它将提取一个数字并可以消除任何类型的字符。

def extract_nbr(input_str):

if input_str is None or input_str == '':

return 0

out_number = ''

for ele in input_str:

if ele.isdigit():

out_number += ele

return float(out_number)

#4楼

此答案还包含数字在字符串中为浮点的情况

def get_first_nbr_from_str(input_str):

'''

:param input_str: strings that contains digit and words

:return: the number extracted from the input_str

demo:

'ab324.23.123xyz': 324.23

'.5abc44': 0.5

'''

if not input_str and not isinstance(input_str, str):

return 0

out_number = ''

for ele in input_str:

if (ele == '.' and '.' not in out_number) or ele.isdigit():

out_number += ele

elif out_number:

break

return float(out_number)

#5楼

如果您知道字符串中只有一个数字,即“ hello 12 hi”,则可以尝试过滤。

例如:

In [1]: int(''.join(filter(str.isdigit, '200 grams')))

Out[1]: 200

In [2]: int(''.join(filter(str.isdigit, 'Counters: 55')))

Out[2]: 55

In [3]: int(''.join(filter(str.isdigit, 'more than 23 times')))

Out[3]: 23

但是要小心! :

In [4]: int(''.join(filter(str.isdigit, '200 grams 5')))

Out[4]: 2005

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值