我正在嘗試刪除標點符號以檢查短語(或單詞)是否是回文,盡管當我有一個帶有數字的單詞時,它們將被刪除,并且它返回True而不是False?!?a2”在用子返回“a”清理標點符號后,盡管它仍然應該給我“1a2”。我以為我只拿起標點符號來代替。import redef isPalindrome(s): clean = re.sub("[,.;@#?+^:%-=()!&$]", " ", s) lower = ''.join([i.lower() for i in clean.split()]) if lower == lower[::-1]: return True else: return Falseprint(isPalindrome("1a2"))
3 回答

HUX布斯
TA貢獻1876條經驗 獲得超6個贊
在你的情況下,我會使用str.maketrans
和字符串模塊中的標點符號集,因為我認為這比正則表達式更具可讀性:
import string
s = s.translate(str.maketrans('', '', string.punctuation))

隔江千里
TA貢獻1906條經驗 獲得超10個贊
特殊字符必須在正則表達式字符串中轉義。即
clean = re.sub(r"[,\.;@\#\?\+\^:%\-=\(\)!\&\$]", " ", s)
或使用 re.escape,它會自動轉義特殊字符
esc = re.escape(r',.;@#?+^:%-=()!&$')
clean = re.sub("[" + esc + "]", " ", s)
添加回答
舉報
0/150
提交
取消