我正在尝试删除标点符号,以检查短语(或单词)是否是回文,尽管当我将带有数字的单词删除时,它们会返回True而不是False。用sub清除标点符号后的“ 1a2”返回“ a”,尽管它仍然应该给我“ 1a2”。我以为我只接受标点符号代替。
import re
def isPalindrome(s):
clean = re.sub("[,.;@#?+^:%-=()!&$]", " ", s)
lower = ''.join([i.lower() for i in clean.split()])
if lower == lower[::-1]:
return True
else:
return False
print(isPalindrome("1a2"))
在您的情况下,我会使用str.maketrans
和str.maketrans
中的标点符号,因为我认为这比正则表达式更易读:
string module
特殊字符必须在正则表达式字符串中转义。即
import string
s = s.translate(str.maketrans('', '', string.punctuation))
或使用re.escape,它会自动转义特殊字符
clean = re.sub(r"[,\.;@\#\?\+\^:%\-=\(\)!\&\$]", " ", s)