@@ -119,13 +119,13 @@ def _combinations(*l: str) -> Set[str]:
119
119
Number = group (Imagnumber , Floatnumber , Intnumber )
120
120
121
121
# Tail end of ' string.
122
- Single = r"[^'\\]* (?:\\.[^'\\]* )*'"
122
+ Single = r"(?:\\.| [^'\\])*'"
123
123
# Tail end of " string.
124
- Double = r'[^"\\]* (?:\\.[^"\\]* )*"'
124
+ Double = r'(?:\\.| [^"\\])*"'
125
125
# Tail end of ''' string.
126
- Single3 = r"[^'\\]* (?:(?: \\.|'(?!'')) [^'\\]* )*'''"
126
+ Single3 = r"(?:\\.|'(?!'')| [^'\\])*'''"
127
127
# Tail end of """ string.
128
- Double3 = r'[^"\\]* (?:(?: \\.|"(?!"")) [^"\\]* )*"""'
128
+ Double3 = r'(?:\\.|"(?!"")| [^"\\])*"""'
129
129
_litprefix = r"(?:[uUrRbB]|[rR][bB]|[bBuU][rR])?"
130
130
_fstringlitprefix = r"(?:rF|FR|Fr|fr|RF|F|rf|f|Rf|fR)"
131
131
Triple = group (
@@ -136,12 +136,12 @@ def _combinations(*l: str) -> Set[str]:
136
136
)
137
137
138
138
# 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){(?!{)'
141
141
142
142
# 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){(?!{)'
145
145
146
146
# ! format specifier inside an fstring brace, ensure it's not a `!=` token
147
147
Bang = Whitespace + group ("!" ) + r"(?!=)"
@@ -171,12 +171,12 @@ def _combinations(*l: str) -> Set[str]:
171
171
Special = group (r"\r?\n" , r"[:;.,`@]" )
172
172
Funny = group (Operator , Bracket , Special )
173
173
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"\\]|\\. )*'
176
176
177
177
# 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)({)(?!{)'
180
180
181
181
# First (or only) line of ' or " string.
182
182
ContStr = group (
0 commit comments