Unmatchable dollar in regular expression¶
ID: py/regex/unmatchable-dollar Kind: problem Severity: error Precision: high Tags: - reliability - correctness Query suites: - python-security-and-quality.qls
Click to see the query in the CodeQL repository
A dollar assertion
$ in a regular expression only matches at the end of the input, or (for multi-line regular expressions) at the end of a line. If it is followed by a pattern that must match a non-empty sequence of (non-newline) input characters, it cannot possibly match, rendering the entire regular expression unmatchable.
Examine the regular expression to find and correct any typos.
In the following example, the regular expression
r"\.\(\w+$\)" cannot match any string, since it contains a dollar assertion followed by an escape sequence that matches a closing parenthesis.
The second regular expression,
r"\.\(\w+\)$", has the dollar at the end and will work as expected.
import re #Regular expression that includes a dollar, but not at the end. matcher = re.compile(r"\.\(\w+$\)") def find_it(filename): if matcher.match(filename): print("Found it!") #Regular expression anchored to end of input. fixed_matcher = re.compile(r"\.\(\w+\)$")
Python Standard Library: Regular expression operations.
Regular-Expressions.info: Start of String and End of String Anchors.