繁体   English   中英

如何从 Python 中的字符串中仅提取 integer 部分?

[英]How to extract only integer part from a string in Python?

我想只提取字符串中包含的数字。 可以为此目的组合isdigit()split()还是有更简单/更快的方法?

例子:

m = ['How to extract only number 122', 'The number 35 must be extracted', '1052 must be extracted']

Output:

numbers = [122, 35, 1052]
text = ['How to extract only number', 'The number must be extracted', 'must be extracted']

我的代码:

text = []
numbers = []
temp_numbers = []
for i in range(len(m)):
    text.append([word for word in m[i].split() if not word.isdigit()])
    temp_numbers.append([int(word) for word in m[i].split() if word.isdigit()])
for i in range(len(m)):
    text[i] = ' '.join(text[i])
for elem in temp_numbers:
    numbers.extend(elem)

print(text)
print(numbers)

导入正则表达式库:

import re

如果要提取所有数字:

numbers = []
texts = []
for string in m:
    numbers.append(re.findall("\d+", string))
    texts.append(re.sub("\d+", "", string).strip())

如果您只想提取第一个数字:

numbers = []
texts = []
for string in m:
    numbers.append(re.findall("\d+", string)[0])
    texts.append(re.sub("\d+", "", string).strip())

因此,如果我们将 m 作为列表,您可以遍历它并检查当前字符是否为数字,如果是,则为 append。

For循环解决方案:

m = ['How to extract only number 122', 'The number 35 must be extracted', '1052 must be extracted']

numbers = []
temp_num = ""

for string in m:
    # Presuming m only contains strings

    for char in string:
        if char.isdigit():
            temp_num += char
    
    numbers.append(int(temp_num))
    temp_num = ""

列表理解解决方案 - 在不同的索引处附加每个数字:

m = ['How to extract only number 122', 'The number 35 must be extracted', '1052 must be extracted']

numbers = [int(char) for string in m for char in string if char.isdigit()]

希望这会有所帮助,如果您只想获取可迭代的值(例如列表),只需for varname in iterable它会更快、更清晰。

如果您需要索引和值,请使用for index, varname in enumerate(iterable)

nums_list = []
m = ["How to extract only number 122", "The number 35 must be extracted", "1052 must be extracted"]
for i in m:
    new_l = i.split(" ")
    for j in new_l:
        if j.isdigit():
            nums_list.append(int(j))
print nums_list

操作:

[122, 35, 1052]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM