如何从诸如以下的字符串中去除诸如@ ^ ( ) $
之类的字符。
答案 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