Python检测输入特殊字符返回布尔值时正则编译报错问题
报错原因与修复方案
报错根因
你遇到的re.error: multiple repeat报错原因有两点:
- 正则表达式中的
*、+、?属于正则元字符,作用是定义匹配重复次数,未转义直接作为普通字符匹配时会触发语法解析错误 - 你当前的正则写法是要求匹配
!"#$%&'()*+,-./\:;<=>?@[]^_这一整串连续的字符串,而非匹配其中任意一个特殊字符,不符合功能需求
修复后的完整代码
import re def hasSpecialCharacters(s): # 所有待匹配特殊字符放入字符集[]中,特殊元字符添加转义符 stringCheck = re.compile(r'[!"#$%&\'()*+,\-./\\:;<=>?@\[\]^_]') print(stringCheck.search(s) is not None) def main(): print("Écriver une phrase.") trueOrFalse = str(input("=> ")) hasSpecialCharacters(trueOrFalse) main()
关键修改说明
- 用
r''原始字符串定义正则规则,避免Python字符串转义和正则转义产生冲突 - 将所有待匹配的特殊字符包裹在
[]中,代表只要匹配到其中任意一个字符就命中规则 - 对字符集内有特殊含义的字符添加转义:
-转义为\-避免被识别为字符范围符,[]转义为\[\]避免被识别为字符集边界,\转义为\\ - 简化判断逻辑,直接输出
search结果非空的布尔值,和原有if判断逻辑完全等价
内容的提问来源于stack exchange,提问作者Babilwan
相关产品推荐
相关产品推荐

