@@ -135,10 +135,10 @@ def maybe(*choices): return group(*choices) + '?'
135135Single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''"
136136# Tail end of """ string.
137137Double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""'
138- Triple = group ("[bB ]?[rR]?'''" , '[bB ]?[rR]?"""' )
138+ Triple = group ("[bBuU ]?[rR]?'''" , '[bBuU ]?[rR]?"""' )
139139# Single-line ' or " string.
140- String = group (r"[bB ]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*'" ,
141- r'[bB ]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*"' )
140+ String = group (r"[bBuU ]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*'" ,
141+ r'[bBuU ]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*"' )
142142
143143# Because of leftmost-then-longest match semantics, be sure to put the
144144# longest operators first (e.g., if = came before ==, == would get
@@ -156,9 +156,9 @@ def maybe(*choices): return group(*choices) + '?'
156156Token = Ignore + PlainToken
157157
158158# First (or only) line of ' or " string.
159- ContStr = group (r"[bB ]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*" +
159+ ContStr = group (r"[bBuU ]?[rR]?'[^\n'\\]*(?:\\.[^\n'\\]*)*" +
160160 group ("'" , r'\\\r?\n' ),
161- r'[bB ]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*' +
161+ r'[bBuU ]?[rR]?"[^\n"\\]*(?:\\.[^\n"\\]*)*' +
162162 group ('"' , r'\\\r?\n' ))
163163PseudoExtras = group (r'\\\r?\n' , Comment , Triple )
164164PseudoToken = Whitespace + group (PseudoExtras , Number , Funny , ContStr , Name )
@@ -176,21 +176,35 @@ def _compile(expr):
176176 "bR'''" : Single3 , 'bR"""' : Double3 ,
177177 "Br'''" : Single3 , 'Br"""' : Double3 ,
178178 "BR'''" : Single3 , 'BR"""' : Double3 ,
179- 'r' : None , 'R' : None , 'b' : None , 'B' : None }
179+ "u'''" : Single3 , 'u"""' : Double3 ,
180+ "ur'''" : Single3 , 'ur"""' : Double3 ,
181+ "R'''" : Single3 , 'R"""' : Double3 ,
182+ "U'''" : Single3 , 'U"""' : Double3 ,
183+ "uR'''" : Single3 , 'uR"""' : Double3 ,
184+ "Ur'''" : Single3 , 'Ur"""' : Double3 ,
185+ "UR'''" : Single3 , 'UR"""' : Double3 ,
186+ 'r' : None , 'R' : None , 'b' : None , 'B' : None ,
187+ 'u' : None , 'U' : None }
180188
181189triple_quoted = {}
182190for t in ("'''" , '"""' ,
183191 "r'''" , 'r"""' , "R'''" , 'R"""' ,
184192 "b'''" , 'b"""' , "B'''" , 'B"""' ,
185193 "br'''" , 'br"""' , "Br'''" , 'Br"""' ,
186- "bR'''" , 'bR"""' , "BR'''" , 'BR"""' ):
194+ "bR'''" , 'bR"""' , "BR'''" , 'BR"""' ,
195+ "u'''" , 'u"""' , "U'''" , 'U"""' ,
196+ "ur'''" , 'ur"""' , "Ur'''" , 'Ur"""' ,
197+ "uR'''" , 'uR"""' , "UR'''" , 'UR"""' ):
187198 triple_quoted [t ] = t
188199single_quoted = {}
189200for t in ("'" , '"' ,
190201 "r'" , 'r"' , "R'" , 'R"' ,
191202 "b'" , 'b"' , "B'" , 'B"' ,
192203 "br'" , 'br"' , "Br'" , 'Br"' ,
193- "bR'" , 'bR"' , "BR'" , 'BR"' ):
204+ "bR'" , 'bR"' , "BR'" , 'BR"' ,
205+ "u'" , 'u"' , "U'" , 'U"' ,
206+ "ur'" , 'ur"' , "Ur'" , 'Ur"' ,
207+ "uR'" , 'uR"' , "UR'" , 'UR"' ):
194208 single_quoted [t ] = t
195209
196210tabsize = 8
0 commit comments