如何从字符串中删除特殊字符

时间:2015-01-25 21:40:25

标签: python python-3.x

我一直在研究如何创建一个程序,从用户输入中删除任何空格/特殊字符。我不想留下一串数字,但我还没有弄清楚如何做到这一点。是否有人可以提供帮助?

x = (input("Enter a debit card number: "))
x.translate(None, '!.;,')
print(x)

我创建的代码可能是基本的,但是,它也不起作用。有人可以帮忙吗? :)我正在使用Python3。

3 个答案:

答案 0 :(得分:2)

str.translate的工作方式在Py 3.x中有所不同 - 它需要将序数字典映射到值,因此您使用:

x = input("Enter a debit card number: ")
result = x.translate(str.maketrans({ord(ch):None for ch in '!.;,'}))

虽然你最好只删除所有非数字:

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

或使用内置:

result = ''.join(ch for ch in x if ch.isidigit())

重要的是要注意字符串是不可变的,并且它们的方法返回 new 字符串 - 请确保分配回对象或其他对象以保留结果。

答案 1 :(得分:1)

为此目的,您不需要translate。相反,您可以使用regex

import re
x = input("Enter a debit card number: ")
x = re.sub(r'[\s!.;,]*','',x)
  

[\ s!。;,] *匹配下面列表中的单个字符:

     

量词:*在零和无限次之间,多次   可能,根据需要回馈[贪婪] \ s匹配任何空白区域   字符[\ r \ n \ t \ f]!。;列表中的单个字符!。;,   字面上

     

re.sub(pattern, repl, string, count=0, flags=0)   返回通过替换最左边的非重叠获得的字符串   替换repl在字符串中出现模式。

答案 2 :(得分:0)

假设您只想要数字(信用卡号)

import re: # or 'from re import sub'

s = re.sub('[^0-9]+', "", my_str);

我已将此作为输入:     my_str = "663388191712-483498-39434347!2848484;290850 2332049832048 23042 2 2";

我所得到的只是数字(因为你提到你只想留下数字):

66338819171248349839434347284848429085023320498320482304222