# comment with ALERT ''' multiline comment ### ''' // alert check, no word delimiter check at start of word, bug 397719 #TODO a = 100_000 b = 856_264.65 c = 0x420_F52 def func(x): """ EXTENDED API docs """ if x == 42: func() c1 = {} c2 = { 2.4, 0x42, } a1 = [] a2 = [ "a", 032, ( )] else: print("""multi line string""") print("single \ continued line ") print('single line') if y := x: anext(a) return float(len(a2)) def test_f_literals(): f'xy' f'x{bar}y' f'x{bar["baz"]}y' f'x{bar["baz"]}y\n' f'x{bar["baz"]!r}y\n' f'x{bar["baz"]:.2}y\n' f'{{x{bar["baz"]:.2}}}} }} {{ {x!a}' a = "Escapes in String \U12345678 \xAB \"" a = u'''\''' ''' a = u'''\'''' a = b'\u1234a\xffé\12k\n\g\ s\ \"\ ' a = Rb'\u1234aé\n\g\ ' a = b"""""" a = b"""\"""" a = 'a' \ u'\x12' a = b"t\e's\t" a = Rb"t\e's\t" a = R"\\" \ Rb'\\' \ Rf"""\\""" \ uR'''\\''' # regex (re and regex package) #{ # r'...' patt = r'a+é??a?*a{x,}a{,}a{1}a{1,}a{,2}a{1,2}\g<12>\L<name>\g<name>\w.\'\b\\a#$' # ~~ invalid, but ok patt = r'\p{H}\x12\u1234\1\023\0234\123\1234\12' patt = r'(a)(?:a)(?=a)(?R)(?r)(?a-m:a)(?oups)(?P<name>a)(?|a|b)(?#comment\)\'\")(?>=a)\ (?(1)a|b))a(?(?!a)a|b)' # oups ~ patt = r'[^xy-z]|[]xy[:alpha:]z]|[[\wa(){}\b\]\[\..]|[[a-z]--[c]]' # regex V1 ~~~~~~~~~~~~ patt = r'(((a)))(?:(?!(?<a>a("\'\"))))' patt = r'(?:(?!(?<a>a(\ .' # break # r"..." patt = r"a+é??a?*a{x,}a{,}a{1}a{1,}a{,2}a{1,2}\g<12>\L<name>\g<name>\w.\"\b\\a#$" # ~~ invalid, but ok patt = r"\p{H}\x12\u1234\1\023\0234\123\1234\12" patt = r"(a)(?:a)(?=a)(?R)(?r)(?a-m:a)(?oups)(?P<name>a)(?|a|b)(?#comment\)\'\")\ (?>=a)(?(1)a|b))a(?(?!a)a|b)" # oups ~ patt = r"[^xy-z]|[]xy[:alpha:]z]|[[\wa(){}\b\]\[\..]|[[a-z]--[c]]" # regex V1 ~~~~~~~~~~~~ patt = r"(((a)))(?:(?!(?<a>a(\'\"'))))" patt = r"(?:(?!(?<a>a(\ ." # break # r'''...''' patt = r''' a+é??a?* # ~~ invalid, but ok a{x,}a{{,}}a{1}a{1,}a{,2}a{1,2} # bla bla \g<12>\L<name>\g<name> \w.''\'\b\\a\#\p{H}\x12\u1234\1\023\0234\123\1234\12$ ''' patt = r''' (a)(?:a) (?=a)(?R)(?r)(?a-m:a)(?ou\ ps)(?P<name>a)(?|a|b) a(?#comment\)\'\"''"")(?>=a) (?#bla bla)abc (?(1)a|b))a(?(?!a)a|b) # oups ~ ''' patt = r''' [^xy-\ z] []xy[:alpha:] z] [[\wa(){}\b\]\[\..] [[a-z]--[c]] # regex V1 ''' patt = r'''( ( ( a # bla ) ) )(?: (?! (?<a>a( '" # bla abc\ z )) ) )''' patt = r''' (?: (?! (?<a>a( .''' # break # r"""...""" patt = r""" a+é??a?* # ~~ invalid, but ok a{x,}a{{,}}a{1}a{1,}a{,2}a{1,2} # bla bla \g<12>\L<name>\g<name> \w.""\"\b\\a\#\p{H}\x12\u1234\1\023\0234\123\1234\12$ """ patt = r""" (a)(?:a) (?=a)(?R)(?r)(?a-m:a)(?ou\ ps)(?P<name>a)(?|a|b) a(?#comment\)\'\")(?>=a) (?#bla bla)abc (?(1)a|b))a(?(?!a)a|b) # oups ~ """ patt = r""" [^xy-\ z] []xy[:alpha:] z] [[\wa(){}\b\]\[\..] # bla bla [[a-z]--[c]] # regex V1 """ patt = r"""( ( ( a # bla ) ) )(?: (?! (?<a>a( '" # bla abc\ z )) ) )""" patt = r""" (?: (?! (?<a>a( .""" # break # rb'...' patt = rb'a+é??a?*a{x,}a{,}a{1}a{1,}a{,2}a{1,2}\g<12>\L<name>\g<name>\w.\'\b\\a#$' # oups ~ ~~ invalid, but ok patt = rb'\p{H}\x12\u1234\1\023\0234\123\1234\12' # ~~ oups ~~ patt = br'(a)(?:a)(?=a)(?R)(?r)(?a-m:a)(?oups)(?P<name>a)(?|a|b)(?#comment\)\'\")\ (?>=a)(?(1)a|b))a(?(?!a)a|b)' # oups ~ patt = rb'[^xy-z]|[]xy[:alpha:]z]|[[\wa(){}\b\]\[\..]|[[a-z]--[c]]' # regex V1 ~~~~~~~~~~~~ patt = br'(((a)))(?:(?!(?<a>a("\'\"))))' patt = rb'(?:(?!(?<a>a(\ .' # break # rb"..." patt = rb"a+é??a?*a{x,}a{,}a{1}a{1,}a{,2}a{1,2}\g<12>\L<name>\g<name>\w.\"\b\\a#$" # oups ~ ~~ invalid, but ok patt = rb"\p{H}\x12\u1234\1\023\0234\123\1234\12" # ~~ oups ~~ patt = br"(a)(?:a)(?=a)(?R)(?r)(?a-m:a)(?oups)(?P<name>a)(?|a|b)(?#comment\)\'\")\ (?>=a)(?(1)a|b))a(?(?!a)a|b)" # oups ~ patt = rb"[^xy-z]|[]xy[:alpha:]z]|[[\wa(){}\b\]\[\..]|[[a-z]--[c]]" # regex V1 ~~~~~~~~~~~~ patt = br"(((a)))(?:(?!(?<a>a(\'\"'))))" patt = rb"(?:(?!(?<a>a(\ ." # break # rb'''...''' patt = rb''' a+é??a?* # ~~ invalid, but ok a{x,}a{,}a{1}a{1,}a{,2}a{1,2} # bla bla \g<12>\L<name>\g<name> \w.''\'\b\\a\#\p{H}\x12\u1234\1\023\0234\123\1234\12$ ''' patt = br''' (a)(?:a) (?=a)(?R)(?r)(?a-m:a)(?ou\ ps)(?P<name>a)(?|a|b) a(?#comment\)\'\"''"")(?>=a) (?#bla bla)abc (?(1)a|b))a(?(?!a)a|b) # oups ~ ''' patt = rb''' [^xy-\ z] []xy[:alpha:] z] [[\wa(){}\b\]\[\..] [[a-z]--[c]] # regex V1 ''' patt = br'''( ( ( a # bla ) ) )(?: (?! (?<a>a( '" # bla abc\ z )) ) )''' patt = rb''' (?: (?! (?<a>a( .''' # break # rb"""...""" patt = rb""" a+é??a?* # ~~ invalid, but ok a{x,}a{,}a{1}a{1,}a{,2}a{1,2} # bla bla \g<12>\L<name>\g<name> \w.""\"\b\\a\#\p{H}\x12\u1234\1\023\0234\123\1234\12$ """ patt = br""" (a)(?:a) (?=a)(?R)(?r)(?a-m:a)(?ou\ ps)(?P<name>a)(?|a|b) a(?#comment\)\'\")(?>=a) (?#bla bla)abc (?(1)a|b))a(?(?!a)a|b) # oups ~ """ patt = rb""" [^xy-\ z] []xy[:alpha:] z] [[\wa(){}\b\]\[\..] # bla bla [[a-z]--[c]] # regex V1 """ patt = br"""( ( ( a # bla ) ) )(?: (?! (?<a>a( '" # bla abc\ z )) ) )""" patt = rb""" (?: (?! (?<a>a( .""" # break # rf'...' patt = rf'a+é??a?*\L<name>\L<{name}>\g<name>\g<{name}>\g<12>\w.\'\b\\a#' # ~~ invalid, but ok patt = rf'\p{{H}}\p{name}\p{{{name}}}\x12\u1234\1\023\0234\123\1234\12$' patt = rf'a{n}a{{x,}}a{{,}}a{{1}}a{{1,}}a{{,2}}a{{1,2}}a{{{n}}}a{{{n},}}a{{,{n}}}a{{{n},{n}}}' patt = fr'(a)(?:a)(?=a)(?R)(?r)(?a-m:a)(?oups)(?P<name>a)(?|a|b)(?#comment\)\'\")\ (?>=a)(?(1)a|b))a(?(?!a)a|b)' # oups ~ patt = fr'({x})(?={x})(?{x})(?{x}:a)(?oups)(?P<{x}>a)(?({x})a|b))a(?(?!{x}){y}|{y})' # oups ~ patt = rf'[^x${x}y-z]|[]xy[:alpha:]z]|[[\wa}(){{}}\b\]\[\..]|[[a-z]--[c]]' # regex V1 ~~~~~~~~~~~~ patt = fr'(((a)))(?:(?!(?<a>${x}a("\'\"))))' patt = rf'(?:(?!(?<a>a(\ .${x}' # break # rf"..." patt = rf"a+é??a?*\L<name>\L<{name}>\g<name>\g<{name}>\g<12>\w.\'\b\\a#" # ~~ invalid, but ok patt = rf"\p{{H}}\p{name}\p{{{name}}}\x12\u1234\1\023\0234\123\1234\12$" patt = rf"a{n}a{{x,}}a{{,}}a{{1}}a{{1,}}a{{,2}}a{{1,2}}a{{{n}}}a{{{n},}}a{{,{n}}}a{{{n},{n}}}" patt = fr"(a)(?:a)(?=a)(?R)(?r)(?a-m:a)(?oups)(?P<name>a)(?|a|b)(?#comment\)\'\")\ (?>=a)(?(1)a|b))a(?(?!a)a|b)" # oups ~ patt = fr"({x})(?={x})(?{x})(?{x}:a)(?oups)(?P<{x}>a)(?({x})a|b))a(?(?!{x}){y}|{y})" # oups ~ patt = rf"[^x${x}y-z]|[]xy[:alpha:]z]|[[\wa}(){{}}\b\]\[\..]|[[a-z]--[c]]" # regex V1 ~~~~~~~~~~~~ patt = fr"(((a)))(?:(?!(?<a>${x}a('\"'))))" patt = rf"(?:(?!(?<a>a(\ .${x}" # break # rf'''...''' patt = rf''' a+é??a?* # ~~ invalid, but ok a{n}a{{x,}}a{{,}}a{{1}}a{{1,}}a{{,2}}a{{1,2}} # bla bla a{{{n}}}a{{{n},}}a{{,{n}}}a{{{n},{n}}} \L<name>\L<{name}>\g<name>\g<{name}>\g<12> \w.''\'\b\\a\#\p{{H}}\p{name}\p{{{name}}}\x12\u1234\1\023\0234\123\1234\12$ ''' patt = fr''' (a)(?:a) (?=a)(?R)(?r)(?a-m:a)(?ou\ ps)(?P<name>a)(?|a|b) a(?#comment\)\'\"''"")(?>=a) (?#bla {} {a} {{a}} } bla)abc (?(1)a|b))a(?(?!a)a|b) # oups ~ ({x})(?={x})(?{x})(?{x}:a)(?oups)(?P<{x}>a)(?({x})a|b))a(?(?!{x}){y}|{y}) # oups ~ ''' patt = rf''' [^x${x}y-\ z] []xy[:alpha:] z] [[\wa}(){{}}\b\]\[\..] [[a-z]--[c]] # regex V1 ''' patt = fr'''( ( ( a # bla ) ) )(?: (?! (?<a>a( '" # bla abc\ z )) ) )''' patt = rf''' (?: (?! (?<a>${x}a( .''' # break # rf"""...""" patt = rf""" a+é??a?* # ~~ invalid, but ok a{n}a{{x,}}a{{,}}a{{1}}a{{1,}}a{{,2}}a{{1,2}} # bla bla a{{{n}}}a{{{n},}}a{{,{n}}}a{{{n},{n}}} \L<name>\L<{name}>\g<name>\g<{name}>\g<12> \w.""\"\b\\a\#\p{{H}}\p{name}\p{{{name}}}\x12\u1234\1\023\0234\123\1234\12$ """ patt = fr""" (a)(?:a) (?=a)(?R)(?r)(?a-m:a)(?ou\ ps)(?P<name>a)(?|a|b) a(?#comment\)\'\")(?>=a) (?#bla {} {a} {{a}} } bla)abc (?(1)a|b))a(?(?!a)a|b) # oups ~ ({x})(?={x})(?{x})(?{x}:a)(?oups)(?P<{x}>a)(?({x})a|b))a(?(?!{x}){y}|{y}) # oups ~ """ patt = rf""" [^x${x}y-\ z] []xy[:alpha:] z] [[\wa}(){{}}\b\]\[\..] # bla bla [[a-z]--[c]] # regex V1 """ patt = fr"""( ( ( a # bla ) ) )(?: (?! (?<a>a( '" # bla abc\ z )) ) )""" patt = rf""" (?: (?! (?<a>${x}a( .""" # break #} "Escapes in Doc/Comment String \u1234 \xAb \"\\" ''' Doc/Comment String \N{123} \'''' """ Doc/Comment String \17 \x1f \n \" \\""" # Decimal, Hex, Binary, Octal a = 1_2_34L b = 0_0_00_0 c = 0xA_3f_43D d = 0b0_0_1_01 e = 0o71_2_34 # Float d = 1.1E+3 e = 1.E+3 f = .1E+3 g = 1E+3 h = 1.1 i = 1. j = .1 k = 1 l = 1_0.e+3_22 + .2_1e2 + 11_1. # Complex m = 1.1E+3j n = 1.E+3j o = .1E+3j p = 1E+3j q = 1.1j r = 1.j s = .1j t = 1j u = 1_0.e+3_22j + .2_1e2j + 11_1.j # Invalid numbers aaa.123 aaa123 .0x123 # match and case keywords foo( # no keyword match if xx else yyy ) match = 3 match.foo() match command.split(): case ["quit"]: print("Goodbye!") match(command.split()) match(command.split()): case ["quit"]: print("Goodbye!") def func1(): yield 1 yield from [func(), 1, 2, "3"] # invalid, "from" no longer part of "yield from" yield, from 1 async def func2(): await asyncio.sleep(1) assert cond, \ "bla bla" print('dsdsa' \ 'dsdasw' 'dsadsa') "\\\\\\\\\\ENSURE THAT THIS AND THE FOLLOWING LINES ARE AT THE END OF THE FILE\\\\\\\\\\ \ " a = 'otherwise the next line will be stuck on the Error attribute' BR"Strings delimited by single quotes (' or ") can NOT be defined across multiple lines unless escaped with \ "