猿问

蟒蛇 re.sub 删除数字字符回文

我正在尝试删除标点符号以检查短语(或单词)是否是回文,尽管当我有一个带有数字的单词时,它们将被删除,并且它返回True而不是False。“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"))


慕村225694
浏览 70回答 3
3回答

拉风的咖菲猫

您正在正则表达式中使用,并且需要正确转义它,请尝试以下操作:-re.sub("[,.;@#?+^:%\-=()!&$]", " ", s)在文档中查看特殊字符列表以及如何注意 .[]

HUX布斯

在你的情况下,我会使用str.maketrans和字符串模块中的标点符号集,因为我认为这比正则表达式更具可读性:import strings = s.translate(str.maketrans('', '', string.punctuation))

隔江千里

特殊字符必须在正则表达式字符串中转义。即clean = re.sub(r"[,\.;@\#\?\+\^:%\-=\(\)!\&\$]", " ", s)或使用 re.escape,它会自动转义特殊字符esc = re.escape(r',.;@#?+^:%-=()!&$')clean = re.sub("[" + esc + "]", " ", s)
随时随地看视频慕课网APP

相关分类

Python
我要回答