删除字符串中的特殊字符(在列表中)

时间:2016-10-12 10:15:54

标签: python regex

我有一堆特殊字符,如:

func load_downloads(){
for track in arr_tracks{

                let urlString = BASE_URL + "/track/download/" + "\(track.id)"
                print("downloaded url",urlString)
                let url = NSURL(string: urlString)
                let downloadTask = backgroundSession.downloadTask(with: url as! URL)
                downloadTask.resume()
            }
        }


func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {

        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let destinationURLForFile = documentsURL.appendingPathComponent((downloadTask.originalRequest?.url?.lastPathComponent)! + "_" + (downloadTask.response?.suggestedFilename)!)

        let fileManager = FileManager()

        if fileManager.fileExists(atPath: destinationURLForFile.path){
        }
        else{
            do {
                try fileManager.moveItem(at: location as URL, to: destinationURLForFile as URL)
            }catch{
                print("An error occurred while moving file to destination url")
            }
        }

    }

我有一个字符串:

special=[r'''\\''', r'''+''', r'''-''', r'''&''', r'''|''', r'''!''', r'''(''', r''')''', r'''{''', r'''}''',\
     r'''[''', r''']''', r'''^''', r'''~''', r'''*''', r'''?''', r''':''', r'''"''', r''';''', r''' ''']

如何更换?我期待着:

stringer="Müller my [ string ! is cool^&"

此外,是否有一些内置来替换Python中的这些“特殊”字符?

2 个答案:

答案 0 :(得分:1)

这可以通过简单的生成器表达式来解决:

>>> ''.join(ch for ch in stringer if ch not in special)
'M\xc3\xbcllermystringiscool'

请注意,这也会删除空格,因为它们位于special列表中(最后一个元素)。如果您不希望删除它们,请不要在special中包含空格,或者相应地修改if检查。

答案 1 :(得分:0)

如果从特价中移除空格,可以使用re.sub()执行此操作,但请注意,首先需要转义特殊的正则表达式字符。

In [58]: special=[r'''\\''', r'''+''', r'''-''', r'''&''', r'''|''', r'''!''', r'''(''', r''')''', r'''{''', r'''}''',\
     r'''[''', r''']''', r'''^''', r'''~''', r'''*''', r'''?''', r''':''', r'''"''', r''';''']

In [59]: print re.sub(r"[{}]".format(re.escape(''.join(special))), '', stringer, re.U)
Müller my  string  is cool