正则表达式字符类中的重复项¶
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
正则表达式中的字符类表示字符集,因此无需在同一个字符类中重复指定同一个字符两次。字符类中的重复字符充其量是无用的,甚至可能表明存在潜在的错误。
建议¶
确定一个字符是简单重复,还是字符类实际上是指一个组。如果它只是一个重复,则删除重复字符。如果是指一个组,则用圆括号替换方括号。
示例¶
在以下示例中,字符类 [password|pwd]
中包含字符 d
、p
、s
和 w
的两个实例。程序员很可能想写 (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)"
。