python - 为什么删除字符串中非字母字符的正则表达式函数不起作用?
问题描述
我正在尝试挑战,我设法成功了,但在某种情况下它并没有按照我想要的方式工作。
这是挑战:Given a string, return whether or not it forms a palindrome ignoring case and non-alphabetical characters. Note: a palindrome is a sequence of characters that reads the same forwards and backwards. Ex: Given the following strings... "level", return true "algorithm", return false "A man, a plan, a canal: Panama.", return true
这是我的代码:
import re
def isPalindrome(str):
reversedString = re.sub(r'[^a-z]', '', str)
reversedString = str[::-1]
if reversedString == str:
print(True)
else:
print(False)
所以,当我输入例如'level'时,它确实返回true,当我输入算法时确实返回false,但问题是问题中的第三个示例仍然打印出false,而因为它是一个实际的回文,它应该返回假。如果我们去掉所有非字母字符,例如点、逗号和列,它就是回文。所以我自然而然地浏览了互联网,看看我们怎么可能做到这一点,发现使用正则表达式是最有效的方法,所以我将它实现到我的函数中。问题是,因为总是有一个,它实际上就像 regex 方法根本不存在一样运行,它基本上不会删除非字母字符,而它应该......所以,在这里我开始知道我可能做错了,如果我能得到别人的帮助,
感谢大家阅读本文!
解决方案
首先,您的正则表达式将删除大写字母。即使您修改了正则表达式以删除非大写和非小写字母,您也会reversedString
在下一行代码中破坏您的结果 ()。
您确实需要首先将输入字符串转换为全部小写或全部大写(实际上是小写,因为您要删除非小写字母),因为您的输入是混合的,并且您的回文不会向前读取相同的内容和倒退,除非你这样做。
import re
def isPalindrome(str):
str = str.lower()
filteredString = re.sub(r'[^a-z]', '', str)
reversedString = filteredString[::-1]
if reversedString == filteredString:
print(True)
else:
print(False)
>>> isPalindrome("A man, a plan, a canal: Panama.")
True
推荐阅读
- flutter - 如何从未来返回一个字符串
在颤振中 - docker - Docker:无法访问正在运行的服务器 api
- java - 返回最大元素
- java - 标记 Java 程序的输出目录
- python - Python - 导入 open3d 时 DLL 加载失败
- r - R/exams 是否可以使用 $$ for Latex 方程将练习导出到 Blackboard?
- javascript - JavaScript code doesn't work inside foreach
- rust - 使用获取值的所有权的函数修改循环内的值
- javascript - React DnD - 开始拖动时如何使项目不透明度为0?
- reactjs - React Hooks - 与多个动态组件共享父状态