我有這樣的字符串:?,?,\u0f6e,?,?,\u2d75,?,?,\ua97d,?,?,\u2d6e,鼺,\x00?我想過濾掉所有這些以斜杠開頭的無效字符,我試圖用 Python 中的正則表達式來做。它確實像這樣工作:re.sub(r",\u0f6e,", r",deleted,", s)但不是這樣:re.sub(r",\.{5},", r",deleted,", s)它應該根據http://pythex.org工作,所以我猜這是因為它們是無效字符?我怎樣才能匹配它們?編輯: @metatoaster 說我的問題不明確:問題似乎是因為輸入字符串s不是原始字符串而出現的。>>> s = ' ?,?,\u0f6e,?,?,\u2d75,?,?,\ua97d,?,?,\u2d6e,鼺,\x00?'>>> re.sub(r",\u0f6e,", r",deleted,", s)' ?,?,deleted,?,?,\u2d75,?,?,\ua97d,?,?,\u2d6e,鼺,\x00?'
2 回答

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
您似乎有一個帶有未定義 Unicode 代碼點的字符串。 \u0f6e是表示為轉義碼的單個代碼點。例子:
>>> s = '?,?,\u0f6e,?,?,\u2d75,?,?,\ua97d,?,?,\u2d6e,鼺,\x00?'
>>> s
'?,?,\u0f6e,?,?,\u2d75,?,?,\ua97d,?,?,\u2d6e,鼺,\x00?'
>>> print(s)
?,?,?,?,?,?,?,?,?,?,?,?,鼺, ?
請注意打印字符串如何將字符顯示為未定義的框。它顯示為用于調試的轉義碼。這些代碼點有一些共同點。根據 Unicode 數據庫,它們是 C 類(控制)代碼點。他們也沒有名字。一種快速過濾方法是:
>>> ''.join(['deleted' if ud.category(c)[0] == 'C' else c for c in s])
'?,?,deleted,?,?,deleted,?,?,deleted,?,?,deleted,鼺,deleted?'
添加回答
舉報
0/150
提交
取消