CodeQL 文档

正则表达式字符类中的重复项

ID: py/regex/duplicate-in-character-class
Kind: problem
Security severity: 
Severity: warning
Precision: very-high
Tags:
   - reliability
   - readability
Query suites:
   - python-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

正则表达式中的字符类表示字符集,因此无需在同一个字符类中重复指定同一个字符两次。字符类中的重复字符充其量是无用的,甚至可能表明存在潜在的错误。

建议

确定一个字符是简单重复,还是字符类实际上是指一个组。如果它只是一个重复,则删除重复字符。如果是指一个组,则用圆括号替换方括号。

示例

在以下示例中,字符类 [password|pwd] 中包含字符 dpsw 的两个实例。程序员很可能想写 (password|pwd)(匹配字符串 "password" 或字符串 "pwd" 的模式),但意外地误输入了包围的方括号。

import re
matcher = re.compile(r"[password|pwd]")

def find_password(data):
    if matcher.match(data):
        print("Found password!")

要解决此问题,应将正则表达式重写为 r"(password|pwd)"

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私