从字符串中删除非数字字符

时间:2013-06-27 07:19:03

标签: python python-3.x python-3.3

我被赋予了从文本文件或字符串中删除所有非数字字符(包括空格)的任务,然后在旧字符旁边打印新结果,例如:

在:

sd67637 8

后:

sd67637 8 = 676378

由于我是初学者,我不知道从哪里开始这项任务。请帮忙

5 个答案:

答案 0 :(得分:56)

最简单的方法是使用正则表达式

import re
a = 'lkdfhisoe78347834 (())&/&745  '
result = re.sub('[^0-9]','', a)

print result
>>> '78347834745'

答案 1 :(得分:17)

循环遍历字符串,char by char,仅包含数字:

new_string = ''.join(ch for ch in your_string if ch.isdigit())

或者在你的字符串上使用正则表达式(如果在某些时候你想分别处理不连续的组)...

import re
s = 'sd67637 8' 
new_string = ''.join(re.findall(r'\d+', s))
# 676378

然后只是print他们出来:

print(old_string, '=', new_string)

答案 2 :(得分:9)

这有一个builtin

  

string.translate(s,table [,deletechars])

     

删除s中的所有字符   在deletechars(如果存在)中,然后翻译   使用表的字符,必须是256个字符的字符串给出   每个字符值的翻译,由其序数索引。如果   table为None,则只执行字符删除步骤。

>>> import string
>>> non_numeric_chars = ''.join(set(string.printable) - set(string.digits))
>>> non_numeric_chars = string.printable[10:]  # more effective method. (choose one)
'sd67637 8'.translate(None, non_numeric_chars)
'676378'

或者你可以在没有导入的情况下完成它(但没有理由这样做):

>>> chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> 'sd67637 8'.translate(None, chars)
'676378'

答案 3 :(得分:2)

您可以使用string.ascii_letters来识别您的非数字:

from string import *

a = 'sd67637 8'
a = a.replace(' ', '')

for i in ascii_letters:
    a = a.replace(i, '')

答案 4 :(得分:0)

提取整数

示例:sd67637 8 ==> 676378

import re
def extract_int(x):
    return re.sub('[^\d]','', x)

提取单个浮点数/整数(可能的小数点分隔符)

示例:sd7512.sd23 ==> 7512.23

import re
def extract_single_float(x):
    return re.sub('[^\d|\.]','', x)

提取多个浮点数/浮点数

示例:123.2 xs12.28 4 ==> [123.2, 12.28, 4]

import re
def extract_floats(x):
    return re.findall("\d+\.\d+", x)