@@ -119,13 +119,13 @@ def _combinations(*l: str) -> Set[str]:
119119Number = group (Imagnumber , Floatnumber , Intnumber )
120120
121121# Tail end of ' string.
122- Single = r"[^'\\]* (?:\\.[^'\\]* )*'"
122+ Single = r"(?:\\.| [^'\\])*'"
123123# Tail end of " string.
124- Double = r'[^"\\]* (?:\\.[^"\\]* )*"'
124+ Double = r'(?:\\.| [^"\\])*"'
125125# Tail end of ''' string.
126- Single3 = r"[^'\\]* (?:(?: \\.|'(?!'')) [^'\\]* )*'''"
126+ Single3 = r"(?:\\.|'(?!'')| [^'\\])*'''"
127127# Tail end of """ string.
128- Double3 = r'[^"\\]* (?:(?: \\.|"(?!"")) [^"\\]* )*"""'
128+ Double3 = r'(?:\\.|"(?!"")| [^"\\])*"""'
129129_litprefix = r"(?:[uUrRbB]|[rR][bB]|[bBuU][rR])?"
130130_fstringlitprefix = r"(?:rF|FR|Fr|fr|RF|F|rf|f|Rf|fR)"
131131Triple = group (
@@ -136,12 +136,12 @@ def _combinations(*l: str) -> Set[str]:
136136)
137137
138138# beginning of a single quoted f-string. must not end with `{{` or `\N{`
139- SingleLbrace = r"[^'\\{]* (?:(?: \\N{|\\.|{{) [^'\\{]* )*(?<!\\N){(?!{)"
140- DoubleLbrace = r'[^"\\{]* (?:(?: \\N{|\\.|{{) [^"\\{]* )*(?<!\\N){(?!{)'
139+ SingleLbrace = r"(?:\\N{|\\.|{{| [^'\\{])*(?<!\\N){(?!{)"
140+ DoubleLbrace = r'(?:\\N{|\\.|{{| [^"\\{])*(?<!\\N){(?!{)'
141141
142142# beginning of a triple quoted f-string. must not end with `{{` or `\N{`
143- Single3Lbrace = r"[^'{]* (?:(?: \\N{|\\[^{]|{{|'(?!'')) [^'{]* )*(?<!\\N){(?!{)"
144- Double3Lbrace = r'[^"{]* (?:(?: \\N{|\\[^{]|{{|"(?!"")) [^"{]* )*(?<!\\N){(?!{)'
143+ Single3Lbrace = r"(?:\\N{|\\[^{]|{{|'(?!'')| [^'{\\] )*(?<!\\N){(?!{)"
144+ Double3Lbrace = r'(?:\\N{|\\[^{]|{{|"(?!"")| [^"{\\] )*(?<!\\N){(?!{)'
145145
146146# ! format specifier inside an fstring brace, ensure it's not a `!=` token
147147Bang = Whitespace + group ("!" ) + r"(?!=)"
@@ -171,12 +171,12 @@ def _combinations(*l: str) -> Set[str]:
171171Special = group (r"\r?\n" , r"[:;.,`@]" )
172172Funny = group (Operator , Bracket , Special )
173173
174- _string_middle_single = r"[^\n'\\]* (?:\\. [^\n'\\]* )*"
175- _string_middle_double = r'[^\n"\\]* (?:\\. [^\n"\\]* )*'
174+ _string_middle_single = r"(?:[^\n'\\]|\\. )*"
175+ _string_middle_double = r'(?:[^\n"\\]|\\. )*'
176176
177177# FSTRING_MIDDLE and LBRACE, must not end with a `{{` or `\N{`
178- _fstring_middle_single = r"[^\n'{]* (?:(?: \\N{|\\[^{]|{{) [^\n'{]* )*(?<!\\N)({)(?!{)"
179- _fstring_middle_double = r'[^\n"{]* (?:(?: \\N{|\\[^{]|{{) [^\n"{]* )*(?<!\\N)({)(?!{)'
178+ _fstring_middle_single = r"(?:\\N{|\\[^{]|{{| [^\n'{\\] )*(?<!\\N)({)(?!{)"
179+ _fstring_middle_double = r'(?:\\N{|\\[^{]|{{| [^\n"{\\] )*(?<!\\N)({)(?!{)'
180180
181181# First (or only) line of ' or " string.
182182ContStr = group (
0 commit comments