为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村225694 2022-09-20 15:22:31
我正在尝试删除标点符号以检查短语(或单词)是否是回文,尽管当我有一个带有数字的单词时,它们将被删除,并且它返回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 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

您正在正则表达式中使用,并且需要正确转义它,请尝试以下操作:-

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

文档中查看特殊字符列表以及如何注意 .[]


查看完整回答
反对 回复 2022-09-20
?
HUX布斯

TA贡献1876条经验 获得超6个赞

在你的情况下,我会使用str.maketrans字符串模块中的标点符号集,因为我认为这比正则表达式更具可读性:

import string

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


查看完整回答
反对 回复 2022-09-20
?
隔江千里

TA贡献1906条经验 获得超10个赞

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


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

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


esc = re.escape(r',.;@#?+^:%-=()!&$')

clean = re.sub("[" + esc + "]", " ", s)


查看完整回答
反对 回复 2022-09-20
  • 3 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信