re.search中使用|运算符触发TypeError的问题及解决方法
解决正则表达式中
|使用的报错问题 嘿,这个坑我之前也踩过!你遇到的TypeError完全是因为Python把你写的"UP"|"DOWN"当成了字符串的位运算操作,但字符串根本不支持|这个位运算符,自然就报错啦。
正确的修复方法有这几种:
1. 把所有匹配项放到同一个正则字符串里
把|作为正则语法的一部分,包裹在同一个字符串中,这样re.search就能识别这是“或”的匹配规则:
import re moves = input("Enter your moves: ") # 把所有方向用|分隔,放在同一个正则模式字符串里 m = re.search(r"UP|DOWN|LEFT|RIGHT", moves) if m: print(f"找到有效方向:{m.group()}") else: print("没有找到有效方向")
这里用r""原始字符串是为了避免不必要的转义问题,让正则表达式更清晰。
2. 动态生成正则模式(适合选项较多的情况)
如果以后要添加更多方向,直接修改列表就可以,不用手动改正则字符串:
import re # 把所有方向存在列表里 valid_directions = ["UP", "DOWN", "LEFT", "RIGHT"] # 用|把列表元素拼接成正则模式 pattern = re.compile("|".join(valid_directions)) moves = input("Enter your moves: ") m = pattern.search(moves)
3. 不用正则,用更简单的in判断
如果只是单纯判断字符串是否包含其中某个方向,其实没必要用正则,用any()结合in操作更直观:
valid_directions = {"UP", "DOWN", "LEFT", "RIGHT"} moves = input("Enter your moves: ") has_valid_dir = any(dir in moves for dir in valid_directions) if has_valid_dir: print("包含有效方向") else: print("不包含有效方向")
核心问题就是你之前把|用在了字符串之间,而不是作为正则表达式的语法写在同一个字符串里,调整一下写法就搞定啦!
内容的提问来源于stack exchange,提问作者Gwen
相关产品推荐
相关产品推荐

