我被赋予了从文本文件或字符串中删除所有非数字字符(包括空格)的任务,然后在旧字符旁边打印新结果,例如:
在:
sd67637 8
后:
sd67637 8 = 676378
由于我是初学者,我不知道从哪里开始这项任务。请帮忙
答案 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)