python re.sub 去除数字字符回文
python re.sub removes numeric characters palindrome
我正在尝试删除标点符号以检查短语(或单词)是否为回文,但当我有一个带有数字的单词时,它们会被删除并且 return True 而不是 False。使用 sub returns 'a' 清除标点符号后的“1a2”,尽管它仍应给我“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"))
您在正则表达式中使用了 -
,您需要正确地转义它,请试试这个:
re.sub("[,.;@#?+^:%\-=()!&$]", " ", s)
在 doc 中查看特殊字符列表以及如何注释 []
。
您的正则表达式字符串中的特殊字符必须转义。即
clean = re.sub(r"[,\.;@\#\?\+\^:%\-=\(\)!\&$]", " ", s)
或使用re.escape,自动转义特殊字符
esc = re.escape(r',.;@#?+^:%-=()!&$')
clean = re.sub("[" + esc + "]", " ", s)
我会在你的情况下使用 str.maketrans
and the punctuation set from the string module,因为我认为这比正则表达式更具可读性:
import string
s = s.translate(str.maketrans('', '', string.punctuation))
我正在尝试删除标点符号以检查短语(或单词)是否为回文,但当我有一个带有数字的单词时,它们会被删除并且 return True 而不是 False。使用 sub returns 'a' 清除标点符号后的“1a2”,尽管它仍应给我“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"))
您在正则表达式中使用了 -
,您需要正确地转义它,请试试这个:
re.sub("[,.;@#?+^:%\-=()!&$]", " ", s)
在 doc 中查看特殊字符列表以及如何注释 []
。
您的正则表达式字符串中的特殊字符必须转义。即
clean = re.sub(r"[,\.;@\#\?\+\^:%\-=\(\)!\&$]", " ", s)
或使用re.escape,自动转义特殊字符
esc = re.escape(r',.;@#?+^:%-=()!&$')
clean = re.sub("[" + esc + "]", " ", s)
我会在你的情况下使用 str.maketrans
and the punctuation set from the string module,因为我认为这比正则表达式更具可读性:
import string
s = s.translate(str.maketrans('', '', string.punctuation))