我正在嘗試刪除標(biāo)點符號以檢查短語(或單詞)是否是回文,盡管當(dāng)我有一個帶有數(shù)字的單詞時,它們將被刪除,并且它返回True而不是False。“1a2”在用子返回“a”清理標(biāo)點符號后,盡管它仍然應(yīng)該給我“1a2”。我以為我只拿起標(biāo)點符號來代替。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 回答

拉風(fēng)的咖菲貓
TA貢獻1995條經(jīng)驗 獲得超2個贊

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

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