python re.sub删除数字字符回文

问题描述 投票:0回答:3

我正在尝试删除标点符号,以检查短语(或单词)是否是回文,尽管当我将带有数字的单词删除时,它们会返回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"))
python palindrome re
3个回答
0
投票

您在正则表达式中使用了许多特殊字符,需要正确地转义它们,请改用此方法:

re.sub("[,\.;@#\?\+\^:%\-=()!&\$]", " ", s)

doc中查找特殊字符列表。


0
投票

在您的情况下,我会使用str.maketransstr.maketrans中的标点符号,因为我认为这比正则表达式更易读:

string module

0
投票

特殊字符必须在正则表达式字符串中转义。即

import string
s = s.translate(str.maketrans('', '', string.punctuation))

或使用re.escape,它会自动转义特殊字符

clean = re.sub(r"[,\.;@\#\?\+\^:%\-=\(\)!\&\$]", " ", s)
© www.soinside.com 2019 - 2024. All rights reserved.