@@ -74,10 +74,11 @@ def maybe(*choices): return group(*choices) + '?'
7474Single3 = r"[^'\\]*(?:(?:\\.|'(?!''))[^'\\]*)*'''"
7575# Tail end of """ string.
7676Double3 = r'[^"\\]*(?:(?:\\.|"(?!""))[^"\\]*)*"""'
77- Triple = group ("[ubUB]?[rR]?'''" , '[ubUB]?[rR]?"""' )
77+ _litprefix = r"(?:[uUrRbB]|[rR][bB]|[bBuU][rR])?"
78+ Triple = group (_litprefix + "'''" , _litprefix + '"""' )
7879# Single-line ' or " string.
79- String = group (r"[uU]?[rR]? '[^\n'\\]*(?:\\.[^\n'\\]*)*'" ,
80- r'[uU]?[rR]? "[^\n"\\]*(?:\\.[^\n"\\]*)*"' )
80+ String = group (_litprefix + r" '[^\n'\\]*(?:\\.[^\n'\\]*)*'" ,
81+ _litprefix + r' "[^\n"\\]*(?:\\.[^\n"\\]*)*"' )
8182
8283# Because of leftmost-then-longest match semantics, be sure to put the
8384# longest operators first (e.g., if = came before ==, == would get
@@ -95,9 +96,9 @@ def maybe(*choices): return group(*choices) + '?'
9596Token = Ignore + PlainToken
9697
9798# First (or only) line of ' or " string.
98- ContStr = group (r"[uUbB]?[rR]? '[^\n'\\]*(?:\\.[^\n'\\]*)*" +
99+ ContStr = group (_litprefix + r" '[^\n'\\]*(?:\\.[^\n'\\]*)*" +
99100 group ("'" , r'\\\r?\n' ),
100- r'[uUbB]?[rR]? "[^\n"\\]*(?:\\.[^\n"\\]*)*' +
101+ _litprefix + r' "[^\n"\\]*(?:\\.[^\n"\\]*)*' +
101102 group ('"' , r'\\\r?\n' ))
102103PseudoExtras = group (r'\\\r?\n' , Comment , Triple )
103104PseudoToken = Whitespace + group (PseudoExtras , Number , Funny , ContStr , Name )
@@ -111,6 +112,7 @@ def maybe(*choices): return group(*choices) + '?'
111112 "b'''" : single3prog , 'b"""' : double3prog ,
112113 "ur'''" : single3prog , 'ur"""' : double3prog ,
113114 "br'''" : single3prog , 'br"""' : double3prog ,
115+ "rb'''" : single3prog , 'rb"""' : double3prog ,
114116 "R'''" : single3prog , 'R"""' : double3prog ,
115117 "U'''" : single3prog , 'U"""' : double3prog ,
116118 "B'''" : single3prog , 'B"""' : double3prog ,
@@ -120,6 +122,9 @@ def maybe(*choices): return group(*choices) + '?'
120122 "bR'''" : single3prog , 'bR"""' : double3prog ,
121123 "Br'''" : single3prog , 'Br"""' : double3prog ,
122124 "BR'''" : single3prog , 'BR"""' : double3prog ,
125+ "rB'''" : single3prog , 'rB"""' : double3prog ,
126+ "Rb'''" : single3prog , 'Rb"""' : double3prog ,
127+ "RB'''" : single3prog , 'RB"""' : double3prog ,
123128 'r' : None , 'R' : None ,
124129 'u' : None , 'U' : None ,
125130 'b' : None , 'B' : None }
@@ -132,7 +137,9 @@ def maybe(*choices): return group(*choices) + '?'
132137 "ur'''" , 'ur"""' , "Ur'''" , 'Ur"""' ,
133138 "uR'''" , 'uR"""' , "UR'''" , 'UR"""' ,
134139 "br'''" , 'br"""' , "Br'''" , 'Br"""' ,
135- "bR'''" , 'bR"""' , "BR'''" , 'BR"""' ,):
140+ "bR'''" , 'bR"""' , "BR'''" , 'BR"""' ,
141+ "rb'''" , 'rb"""' , "Rb'''" , 'Rb"""' ,
142+ "rB'''" , 'rB"""' , "RB'''" , 'RB"""' ,):
136143 triple_quoted [t ] = t
137144single_quoted = {}
138145for t in ("'" , '"' ,
@@ -142,7 +149,9 @@ def maybe(*choices): return group(*choices) + '?'
142149 "ur'" , 'ur"' , "Ur'" , 'Ur"' ,
143150 "uR'" , 'uR"' , "UR'" , 'UR"' ,
144151 "br'" , 'br"' , "Br'" , 'Br"' ,
145- "bR'" , 'bR"' , "BR'" , 'BR"' , ):
152+ "bR'" , 'bR"' , "BR'" , 'BR"' ,
153+ "rb'" , 'rb"' , "Rb'" , 'Rb"' ,
154+ "rB'" , 'rB"' , "RB'" , 'RB"' ,):
146155 single_quoted [t ] = t
147156
148157tabsize = 8
0 commit comments