如何删除非ASCII字符?

时间:2018-11-19 01:08:24

标签: python

如何从诸如以下的字符串中去除诸如@ ^ ( ) $之类的字符。

sample line

4 个答案:

答案 0 :(得分:0)

首先,ASCII具有@ ^ ( ) $
如果确实要删除@ ^()$和其他非字母字符,则可以通过调用re.sub

使用正则表达式
import re

x = "Room+Floor+ST+MARGARETI+?8???$??DDS+SCHOOL,71+ST+ALBANS+RD,+RD,+THOMSON,+3219,+VIC,Australia"
regex = re.compile('[^a-zA-Z]')
regex.sub('', x)
# output: RoomFloorSTMARGARETIDDSSCHOOLSTALBANSRDRDTHOMSONVICAustralia

答案 1 :(得分:0)

您可以使用正则表达式元字符\W来匹配所有非单词字符(除a-z,A-Z,0-9和_以外的所有字符)。

例如,用空格替换非单词字符,您可以:

>>> str = "Room+Floor+ST+MARGARETI+?8???$? DDS+SCHOOL,71+ST+ALBANS+RD,+RD,+THOMSON,+3219,+VIC,Australia"
>>> re.sub(r'\W+', ' ', str)
'Room Floor ST MARGARETI 8 DDS SCHOOL 71 ST ALBANS RD RD THOMSON 3219 VIC Australia'

例如,您还可以更具体一些,不是单词字符或逗号的所有内容:

>>> re.sub(r'[^\w\,]+', ' ', str)
'Room Floor ST MARGARETI 8 DDS SCHOOL,71 ST ALBANS RD, RD, THOMSON, 3219, VIC,Australia'

答案 2 :(得分:0)

也在ASCII表中的“()@ ^ $”。

您可以使用re.sub替换以下字符:

import re
re.sub('[@^()$]', '', origin_string)

答案 3 :(得分:0)

我认为您的意思是删除非字母数字字符。 您可以参考ASCII table,并可以执行以下操作:

string = "Room+Floor+ST+MARGARETI+?8???$??DDS+SCHOOL,71+ST+ALBANS+RD,+RD,+THOMSON,+3219,+VIC,Australia"

valid_ranges = [
range(97, 123), # a-z
range(65, 91),  # A-Z
range(48, 58),  # 1-9
]
new_string = ''.join([k for k in string for j in valid_ranges if ord(k) in j])
print(new_string)

输出:

RoomFloorSTMARGARETI8DDSSCHOOL71STALBANSRDRDTHOMSON3219VICAustralia