python 将字符串中的数字字符删除后输出_关于python:从字符串中删除非数字字符...

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

之前:

sd67637 8

后:

sd67637 8 = 676378

由于我是初学者,所以我不知道从哪里开始。 请帮忙

是否可能使用Python从字符串中删除除数字以外的字符?

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

import re

a = 'lkdfhisoe78347834 (())&/&745  '

result = re.sub('[^0-9]','', a)

print result

>>> '78347834745'

有什么办法保留小数点吗?

@mark您可以使用\.指定文字小数点。

为什么不[^\d]+?

逐个字符地遍历字符串,仅包含数字:

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)

这更好,因为它不仅适用于ascii

有一个内置的。

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

Delete all characters from s

that are in deletechars (if present), and then translate the

characters using table, which must be a 256-character string giving

the translation for each character value, indexed by its ordinal. If

table is None, then only the character deletion step is performed.

>>> 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

\x0b\x0c'

>>> 'sd67637 8'.translate(None, chars)

'676378'

这应该是最佳答案。

不是真正的>>> s.,d67637 8.translate(None, abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ )会产生.,676378

@DarthKotik好点,OP没有提到任何有关特殊字符的内容,但这很容易解决。检查我的编辑。

@InbarRose itll可以工作,但是一旦您想使用一些西里尔符号或某些中文itll就会失败。就您确切知道您的字段中可能出现的符号集而言,这种解决方案是很好的,但这并不是很好。

@DarthKotik OP没有提及特殊字符或编码。无论如何,string.translate都能用正确的输入解决所有这些问题。就像每个问题一样,应该一次解决一个问题。而且在敏捷开发中,不需要过早的优化。问题很简单,答案很简单。如果您想了解细节,我们将全天待在这里。

不兼容Python 3。非常过时的答案。

@InbarRose请更新python 3的答案(stackoverflow.com/a/41708804/828885)

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

from string import *

a = 'sd67637 8'

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

for i in ascii_letters:

a = a.replace(i, '')

如果要替换冒号,请使用引号"代替冒号'。

那冒号呢?

@ jtlz2,然后使用a = a.replace("",""),请注意引号内的冒号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值