Python正则匹配字符串时出现FutureWarning: Possible nested set报错原因咨询
警告原因解析
你写的正则表达式pattern=r'[[\w][-_]]{5,}'存在嵌套字符集的写法:外层字符集[]内部又嵌套了[\w]和[-_]两个子字符集,形成[[\w][-_]]的结构。Python的re模块在新版本中会将这种写法判定为潜在的语法不规范(当前版本会兼容解析为[\w-_],即匹配单词字符、连字符或下划线),但未来版本会严格规范字符集的语法规则,因此抛出FutureWarning提醒你修正写法。
额外提示:你的正则未满足需求
需要注意的是,当前的正则完全不符合你“至少5个单词,单词间以-或_分隔”的验证要求——它只是匹配5个及以上的单词字符、连字符或下划线的任意组合,比如aaaaa、-----这类不符合单词分隔结构的字符串都会被匹配。
正确的正则及代码
要实现需求,正确的正则应该匹配“单词+分隔符+单词”的重复结构,确保总单词数≥5:
import re password = input('Password:') # 正则解释:开头是1个单词,后续至少4次「分隔符+单词」,确保总单词数≥5 pattern = r'^\w+(?:[-_]\w+){4,}$' is_valid = re.fullmatch(pattern, password) is not None print(is_valid)
说明:
^\w+:匹配第一个单词(至少1个字母/数字/下划线)(?:[-_]\w+){4,}:非捕获组,匹配「连字符/下划线+单词」的结构至少4次,加上第一个单词后总单词数≥5$:匹配字符串结尾,确保整个字符串都符合规则- 移除了
eval(input(...)),eval存在安全风险,直接用input()即可获取输入字符串
内容的提问来源于stack exchange,提问作者jemmitbliss
相关产品推荐
相关产品推荐

