我正在尝试删除标点符号以检查短语(或单词)是否是回文,尽管当我有一个带有数字的单词时,它们将被删除,并且它返回True而不是False。“1a2”在用子返回“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 回答
![?](http://img1.sycdn.imooc.com/54584cc500019c5b02200220-100-100.jpg)
HUX布斯
TA贡献1876条经验 获得超6个赞
在你的情况下,我会使用str.maketrans
和字符串模块中的标点符号集,因为我认为这比正则表达式更具可读性:
import string
s = s.translate(str.maketrans('', '', string.punctuation))
![?](http://img1.sycdn.imooc.com/54584ee0000179f302200220-100-100.jpg)
隔江千里
TA贡献1906条经验 获得超10个赞
特殊字符必须在正则表达式字符串中转义。即
clean = re.sub(r"[,\.;@\#\?\+\^:%\-=\(\)!\&\$]", " ", s)
或使用 re.escape,它会自动转义特殊字符
esc = re.escape(r',.;@#?+^:%-=()!&$')
clean = re.sub("[" + esc + "]", " ", s)
添加回答
举报
0/150
提交
取消