# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"^(?<fullAddress>(?<mailbox>([a-zA-Z0-9\+\!\#\$\%\&\'\*\-\/\=\?\+\_\{\}\|\~]|(?<singleDot>(?<!\.)(?<!^)\.(?!\.))|(?<foldedWhiteSpace>\s?\&\#13\;\&\#10\;.)){1,64})\s?(?<singleAt>(?<!\@)(?<!\-)(?<!\.)\@(?!\@))(?<domain>(?<dns>[[:alnum:]]([[:alnum:]\-]{0,63}\.){1,24}[[:alnum:]\-]{1,63}[[:alnum:]])|(?<IPv4>\[((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])|(?<IPv6Full>(\[IPv6(\:[0-9a-fA-F]{1,4}){8}\]))|(?<IPv6Comp1>\[IPv6\:((([0-9a-fA-F]{1,4})\:){1,3}(\:([0-9a-fA-F]{1,4})){1,5}?\])|\[IPv6\:((([0-9a-fA-F]{1,4})\:){1,5}(\:([0-9a-fA-F]{1,4})){1,3}?\]))|(?<IPv6Comp2>(\[IPv6\:\:(\:[0-9a-fA-F]{1,4}){1,6}\]))|(?<IPv6Comp3>(\[IPv6\:([0-9a-fA-F]{1,4}\:){1,6}\:\]))|(?<IPv6Comp4>(\[IPv6\:\:\:)\])|(?<IPv6v4Full>(\[IPv6(\:[0-9a-fA-F]{1,4}){6}\:((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3})(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])|(?<IPv6v4Comp1>\[IPv6\:((([0-9a-fA-F]{1,4})\:){1,3}(\:([0-9a-fA-F]{1,4})){1,5}?(\:((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\])|\[IPv6\:((([0-9a-fA-F]{1,4})\:){1,5}(\:([0-9a-fA-F]{1,4})){1,3}?(\:((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\]))|(?<IPv6v4Comp2>(\[IPv6\:\:(\:[0-9a-fA-F]{1,4}){1,5}(\:((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\]))|(?<IPv6v4Comp3>(\[IPv6\:([0-9a-fA-F]{1,4}\:){1,5}\:(((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\]))|(?<IPv6v4Comp4>(\[IPv6\:\:\:((?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3})(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])))"
test_str = ("Valid (as per futility) addresses that I agree are valid\n"
"========================================================\n"
"_somename@iana.org test62 Valid\n"
"_Yosemite.Sam@iana.org test128 Valid\n"
"!def!xyz%abc@iana.org test61 Valid\n"
"{_test_}@iana.org test90 Valid\n"
"+1~1+@iana.org test89 Valid\n"
"~@iana.org test129 Valid\n"
"$A12345@iana.org test60 Valid\n"
"1234567890@iana.org test85 Valid\n"
"1234567890123456789012345678901234567890123456789012345678@12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.123456789012345678901234567890123456789012345678901234567890123.iana.org test9 Valid\n"
"1234567890123456789012345678901234567890123456789012345678901234@iana.org test2 Valid\n"
"a-b@bar.com test202 Valid\n"
"a@b.co-foo.uk test209 Valid\n"
"a@bar.com test193 Valid\n"
"aaa@[123.123.123.123] test197 Valid\n"
"cdburgess+!#$%&'*-/=?+_{}|~test@gmail.com test229 Valid\n"
"customer/department@iana.org test127 Valid\n"
"customer/department=shipping@iana.org test59 Valid\n"
"dclo@us.ibm.com test63 Valid\n"
"first.last @iana.org test223 Valid\n"
"first.last@[12.34.56.78] test10 Valid\n"
"first.last@[IPv6:::] test233 Valid\n"
"first.last@[IPv6:::1111:2222:3333:4444:5555:6666] test14 Valid\n"
"first.last@[IPv6:::12.34.56.78] test11 Valid\n"
"first.last@[IPv6:::a2:a3:a4:b1:ffff:11.22.33.44] test252 Valid\n"
"first.last@[IPv6:::a3:a4:b1:ffff:11.22.33.44] test251 Valid\n"
"first.last@[IPv6:1111:2222:3333::4444:5555:6666:7777] test45 Valid\n"
"first.last@[IPv6:::b3:b4] test239 Valid\n"
"first.last@[IPv6:::b4] test236 Valid\n"
"first.last@[IPv6:0123:4567:89ab:cdef::] test249 Valid\n"
"first.last@[IPv6:0123:4567:89ab:CDEF::] test250 Valid\n"
"first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.44] test262 Valid\n"
"first.last@[IPv6:0123:4567:89ab:CDEF::11.22.33.44] test264 Valid\n"
"first.last@[IPv6:1111:2222:3333::4444:12.34.56.78] test12 Valid\n"
"first.last@[IPv6:1111:2222:3333::4444:5555:12.34.56.78] test38 Valid\n"
"first.last@[IPv6:1111:2222:3333::4444:5555:6666] test15 Valid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666::] test16 Valid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78] test13 Valid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888] test17 Valid\n"
"first.last@[IPv6:a1::] test244 Valid\n"
"first.last@[IPv6:a1::11.22.33.44] test258 Valid\n"
"first.last@[IPv6:a1::b2:11.22.33.44] test270 Valid\n"
"first.last@[IPv6:a1::b4] test241 Valid\n"
"first.last@[IPv6:a1:a2::] test247 Valid\n"
"first.last@[IPv6:a1:a2::11.22.33.44] test260 Valid\n"
"first.last@[IPv6:a1:a2:a3:a4::11.22.33.44] test253 Valid\n"
"first.last@[IPv6:a1:a2:a3:a4:b1::11.22.33.44] test254 Valid\n"
"first.last@123.iana.org test20 Valid\n"
"first.last@3com.com test19 Valid\n"
"first.last@example.123 test48 Valid\n"
"first.last@iana.org test1 Valid\n"
"first.last@x23456789012345678901234567890123456789012345678901234567890123.iana.org test18 Valid\n"
"foobar@192.168.0.1 test216 Valid\n"
"Ima.Fool@iana.org test135 Valid\n"
"name.lastname@domain.com test188 Valid\n"
"peter.piper@iana.org test66 Valid\n"
"shaitan@my-domain.thisisminekthx test214 Valid\n"
"t*est@iana.org test88 Valid\n"
"test-test@iana.org test87 Valid\n"
"test. obs@syntax.com test224 Valid\n"
"Test. Folding. Whitespace@iana.org test152 Valid\n"
"test.test@iana.org test92 Valid\n"
"test@[123.123.123.123] test98 Valid\n"
"test@123.123.123.123 test97 Valid\n"
"test@123.123.123.x123 test96 Valid\n"
"test@example.example.iana.org test100 Valid\n"
"test@example.iana.org test99 Valid\n"
"test@iana.org test83 Valid\n"
"TEST@iana.org test84 Valid\n"
"test@test.com test277 Valid\n"
"test@xn--example.com test279 Valid\n"
"test+test@iana.org test86 Valid\n"
"user%uucp!path@berkeley.edu test220 Valid\n"
"user+mailbox@iana.org test58 Valid\n"
"valid@about.museum test212 Valid\n\n"
"Valid (as per futility) addresses that are invalid as per RFC5321\n"
"============================================================================\n"
"+@b.c test203 Valid\n"
"first.last@com test49 Valid\n"
"a@b test190 Valid\n"
"a@bar test201 Valid\n"
"test@Bücher.ch test280 Valid\n"
"test@example test116 Valid\n"
"first.last@[IPv6:::a2:a3:a4:b1:b2:b3:b4] test230 Valid\n"
"first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3::] test231 Valid\n"
"+@b.com test204 Valid\n\n"
"My tests for valid IPv6 and v6v4 addresses\n"
"==========================================\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888]\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.56.78]\n\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666::]\n"
"first.last@[IPv6:1111:2222:3333:4444:5555::8888]\n"
"first.last@[IPv6:1111:2222:3333:4444::7777:8888]\n"
"first.last@[IPv6:1111:2222:3333::6666:7777:8888]\n"
"first.last@[IPv6:1111:2222::5555:6666:7777:8888]\n"
"first.last@[IPv6:1111::4444:5555:6666:7777:8888]\n"
"first.last@[IPv6:::3333:4444:5555:6666:7777:8888]\n"
"first.last@[IPv6:1111:2222:3333:4444:5555::]\n"
"first.last@[IPv6:1111:2222:3333:4444::8888]\n"
"first.last@[IPv6:1111:2222:3333::7777:8888]\n"
"first.last@[IPv6:1111:2222::6666:7777:8888]\n"
"first.last@[IPv6:1111::5555:6666:7777:8888]\n"
"first.last@[IPv6:::4444:5555:6666:7777:8888]\n"
"first.last@[IPv6:::3333:4444:5555:6666:7777:8888]\n"
"first.last@[IPv6:1111:2222:3333:4444::12.34.56.78]\n"
"first.last@[IPv6:1111:2222:3333::6666:12.34.56.78]\n"
"first.last@[IPv6:1111:2222::5555:6666:12.34.56.78]\n"
"first.last@[IPv6:1111::4444:5555:6666:12.34.56.78]\n"
"first.last@[IPv6:::3333:4444:5555:6666:12.34.56.78]\n\n\n"
"Invalid (as per futility) addresses with valid mailbox defective domain\n"
"=======================================================================\n"
"x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x2 test8 Valid\n"
"123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345.iana.org test21 Invalid\n"
"first.last@[IPv6:1111:2222:33333::7777:8888] test47 Invalid\n"
"aaa@[123.123.123.123]a test198 Invalid\n"
"a@b-.com test206 Invalid\n"
"a@bar.com. test200 Invalid\n"
"a@-b.com test205 Invalid\n"
"aaa@.123 test196 Invalid\n"
"aaa@.com test195 Invalid\n"
"aaa@[123.123.123.333] test199 Invalid\n"
"abc@def@iana.org test69 Invalid\n"
"doug@ test73 Invalid\n"
"first.last@ test33 Invalid\n"
"first.last@-xample.com test50 Invalid\n"
"first.last@[::12.34.56.78] test37 Invalid\n"
"first.last@[.12.34.56.78] test35 Invalid\n"
"first.last@[12.34.56.789] test36 Invalid\n"
"first.last@[IPv5:::12.34.56.78] test37 Invalid\n"
"first.last@[IPv6::::] test234 Invalid\n"
"first.last@[IPv6::::11.22.33.44] test256 Invalid\n"
"first.last@[IPv6::::b3:b4] test240 Invalid\n"
"first.last@[IPv6::::b4] test237 Invalid\n"
"first.last@[IPv6::] test232 Invalid\n"
"first.last@[IPv6::11.22.33.44] test255 Invalid\n"
"first.last@[IPv6::a2::b4] test273 Invalid\n"
"first.last@[IPv6::a2:a3:a4:b1:b2:b3:b4] test275 Invalid\n"
"first.last@[IPv6::b3:b4] test238 Invalid\n"
"first.last@[IPv6::b4] test235 Invalid\n"
"first.last@[IPv6:0123:4567:89ab:cdef::11.22.33.xx] test263 Invalid\n"
"first.last@[IPv6:0123:4567:89ab:CDEFF::11.22.33.44] test265 Invalid\n"
"first.last@[IPv6:1111:2222::3333::4444:5555:6666] test44 Invalid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:12.34.56.78] test40 Invalid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:12.34.567.89] test158 Invalid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:12.34.56.78] test41 Invalid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777:8888:9999] test43 Invalid\n"
"first.last@[IPv6:1111:2222:3333:4444:5555:6666:7777] test42 Invalid\n"
"first.last@[IPv6:1111:2222:333x::4444:5555] test46 Invalid\n"
"first.last@[IPv6:a1:::] test245 Invalid\n"
"first.last@[IPv6:a1:::11.22.33.44] test259 Invalid\n"
"first.last@[IPv6:a1:::b4] test242 Invalid\n"
"first.last@[IPv6:a1::11.22.33.44.55] test268 Invalid\n"
"first.last@[IPv6:a1::11.22.33] test267 Invalid\n"
"first.last@[IPv6:a1::a4:b1::b4:11.22.33.44] test266 Invalid\n"
"first.last@[IPv6:a1::b2::11.22.33.44] test271 Invalid\n"
"first.last@[IPv6:a1::b211.22.33.44] test269 Invalid\n"
"first.last@[IPv6:a1::b3:] test272 Invalid\n"
"first.last@[IPv6:a1:] test243 Invalid\n"
"first.last@[IPv6:a1:11.22.33.44] test257 Invalid\n"
"first.last@[IPv6:a1:a2:::] test248 Invalid\n"
"first.last@[IPv6:a1:a2:::11.22.33.44] test261 Invalid\n"
"first.last@[IPv6:a1:a2:] test246 Invalid\n"
"first.last@[IPv6:a1:a2:a3:a4::b1:b2:b3:b4] test276 Invalid\n"
"first.last@[IPv6:a1:a2:a3:a4:b1:b2:b3:] test274 Invalid\n"
"first.last@exampl-.com test51 Invalid\n"
"first.last@sub.do,com test3 Invalid\n"
"first.last@x234567890123456789012345678901234567890123456789012345678901234.iana.org test52 Invalid\n"
"foo@[\\1.2.3.4] test149 Invalid\n"
"gatsby@f.sc.ot.t.f.i.tzg.era.l.d. test82 Invalid\n"
"Invalid@about.museum- test213 Invalid\n"
"test@[123.123.123.123 test117 Invalid\n"
"test@@iana.org test106 Invalid\n"
"test@123.123.123.123] test118 Invalid\n"
"test@123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012.com test115 Invalid\n"
"test@example. test113 Invalid\n"
"test@example.com test278 Invalid\n"
"x@x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456789.x23456 test34 Invalid\n\n\n"
"Invalid (as per futility) addresses with valid domain defective mailbox\n"
"=======================================================================\n"
"-- test --@iana.org test107 Invalid\n"
".@iana.org test133 Invalid\n"
".dot@iana.org test76 Invalid\n"
".first.last@iana.org test24 Invalid\n"
".test@iana.org test104 Invalid\n"
".wooly@iana.org test130 Invalid\n"
"()[]\\;:,><@iana.org test111 Invalid\n"
"[test]@iana.org test108 Invalid\n"
"{^c\\@**Dog^}@cartoon.com test161 Invalid\n"
"@iana.org test72 Invalid\n"
"12345678901234567890123456789012345678901234567890123456789012345@iana.org test23 Invalid\n"
"Abc\\@def@iana.org test155 Invalid\n"
"abc\\@def@iana.org test64 Invalid\n"
"abc\\@iana.org test71 Invalid\n"
"abc\\\\@def@iana.org test70 Invalid\n"
"abc\\\\@iana.org test65 Invalid\n"
"dot.@iana.org test77 Invalid\n"
"first..last@iana.org test26 Invalid\n"
"first.last.@iana.org test25 Invalid\n"
"first(12345678901234567890123456789012345678901234567890)last@(1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890)iana.org test173 Invalid\n"
"first(abc(\\\"def\\\".ghi).mno)middle(abc(\\\"def\\\".ghi).mno).last@(abc(\\\"def\\\".ghi).mno)example(abc(\\\"def\\\".ghi).mno).(abc(\\\"def\\\".ghi).mno)com(abc(\\\"def\\\".ghi).mno) test183 Invalid\n"
"first(middle)last@iana.org test179 Invalid\n"
"first\\@last@iana.org test5 Invalid\n"
"first\\\\@last@iana.org test32 Invalid\n"
"first\\last@iana.org test154 Invalid\n"
"Fred\\ Bloggs@iana.org test156 Invalid\n"
"hello world@iana.org test81 Invalid\n"
"Ima Fool@iana.org test138 Invalid\n"
"Invalid \\ Folding \\ Whitespace@iana.org test218 Invalid\n"
"Joe.\\\\Blow@iana.org test157 Invalid\n"
"NotAnEmail test119 Invalid\n"
"ote\\\"@iana.org test75 Invalid\n"
"phil.h\\@\\@ck@haacked.com test139 Invalid\n"
"pootietang.@iana.org test132 Invalid\n"
"test..test@iana.org test103 Invalid\n"
"test.@iana.org test102 Invalid\n"
"test. obs@syntax.com test225 Invalid\n"
"test.iana.org test101 Invalid\n"
"test@. test112 Invalid\n"
"test@...........com test215 Invalid\n"
"test@.org test114 Invalid\n"
"test@test@iana.org test105 Invalid\n"
"two..dot@iana.org test78 Invalid\n"
"Unicode NULL \\\\\\u0000@char.com test228 Invalid\n"
"wo..oly@iana.org test131 Invalid\n\n\n"
"Invalid (as per futility) addresses with defective mailbox and domain\n"
"=======================================================================\n"
"-- test --@iana.org test107 Invalid\n"
"-@..com test207 Invalid\n"
"-@a..com test208 Invalid\n"
".@ test189 Invalid\n"
"@@bar.com test192 Invalid\n"
"@bar.com test191 Invalid\n"
"@NotAnEmail test120 Invalid\n"
"aaa.com test194 Invalid\n"
"first.last test22 Invalid\n\n\n"
"Valid (as per futility) addresses that use parenthesis or quotes\n"
"================================================================\n"
" ( x ) first ( x ) . ( x) last ( x ) @iana.org test222 Valid\n"
"1234 @ local(blah) .machine .example test178 Valid\n"
"a(a(b(c)d(e(f))g)h(i)j)@iana.org test186 Valid\n"
"c@(Chris's host.)public.example test176 Valid\n"
"cal(foo\\)bar)@iamcal.com test167 Valid\n"
"cal(foo\\@bar)@iamcal.com test166 Valid\n"
"cal(woo(yay)hoopla)@iamcal.com test165 Valid\n"
"cal@iamcal(woo).(yay)com test163 Valid\n"
"first.last@x(1234567890123456789012345678901234567890123456789012345678901234567890).com test185 Valid\n"
"HM2Kinsists@(that comments are allowed)this.is.ok test219 Valid\n"
"jdoe@machine(comment). example test177 Valid\n"
"first.(\\\")middle.last(\\\")@iana.org test182 Valid\n"
"first.( middle )last@iana.org test172 Valid\n"
"first.\\\"last\\\"@iana.org test144 Valid\n"
"first.\\\"mid\\\\dle\\\".\\\"last\\\"@iana.org test151 Valid\n"
"first(Welcome to the (\\\"wonderful\\\" (!)) world of email)@iana.org test174 Valid\n"
"pete(his account)@silly.test(his host) test175 Valid\n"
"first().last@iana.org test171 Valid\n"
"first(a\\\"bc.def).last@iana.org test181 Valid\n"
"first(abc.def).last@iana.org test180 Valid\n"
"first(abc\\(def)@iana.org test184 Valid\n"
"first().last@iana.org test171 Valid\n"
"first(a\\\"bc.def).last@iana.org test181 Valid\n"
"first(abc.def).last@iana.org test180 Valid\n"
"first(abc\\(def)@iana.org test184 Valid\n"
"(foo)cal(bar)@(baz)iamcal.com(quux) test162 Valid\n"
"test.\\\"test\\\"@iana.org test94 Valid\n"
"\"\\\"Unicode NULL \\\\\\u0000\\\"@char.com test226 Valid\n"
"\\\"[[ test ]]\\\"@iana.org test91 Valid\n"
"\\\"Abc@def\\\"@iana.org test56 Valid\n"
"\\\"Abc\\\\@def\\\"@iana.org test53 Valid\n"
"\\\"Austin@Powers\\\"@iana.org test134 Valid\n"
"\\\"Doug \\\\\\\"Ace\\\\\\\" L.\\\"@iana.org test68 Valid\n"
"\\\"first..last\\\"@iana.org test148 Valid\n"
"\\\"first.middle.last\\\"@iana.org test147 Valid\n"
"\\\"first.middle\\\".\\\"last\\\"@iana.org test146 Valid\n"
"\\\"first(last)\\\"@iana.org test221 Valid\n"
"\\\"first@last\\\"@iana.org test6 Valid\n"
"\\\"first\\\".\\\"last\\\"@iana.org test140 Valid\n"
"\\\"first\\\".\\\"middle\\\".\\\"last\\\"@iana.org test145 Valid\n"
"\\\"first\\\".last@iana.org test143 Valid\n"
"\\\"first\\\".middle.\\\"last\\\"@iana.org test141 Valid\n"
"\\\"first\\\\\\\"last\\\"@iana.org test4 Valid\n"
"\\\"first\\\\\\\\\\\\\\\"last\\\"@iana.org test150 Valid\n"
"\\\"first\\\\\\\\last\\\"@iana.org test7 Valid\n"
"\\\"first\\\\last\\\"@iana.org test28 Valid\n"
"\\\"Fred Bloggs\\\"@iana.org test57 Valid\n"
"\\\"Fred\\\\ Bloggs\\\"@iana.org test54 Valid\n"
"\\\"hello my name is\\\"@stutter.com test210 Valid\n"
"\\\"Ima Fool\\\"@iana.org test137 Valid\n"
"\\\"Ima.Fool\\\"@iana.org test136 Valid\n"
"\\\"Joe.\\\\\\\\Blow\\\"@iana.org test55 Valid\n"
"\\\"Joe\\\\\\\\Blow\\\"@iana.org test217 Valid\n"
"\\\"Test \\\\\\\"Fail\\\\\\\" Ing\\\"@iana.org test211 Valid\n"
"\\\"test.test\\\"@iana.org test93 Valid\n"
"\\\"test@test\\\"@iana.org test95 Valid\n"
"\\\"test\\\\\\\"blah\\\"@iana.org test125 Valid\n"
"\\\"test\\\\\\\\blah\\\"@iana.org test121 Valid\n"
"\\\"test\\\\ blah\\\"@iana.org test123 Valid\n"
"\\\"test\\\\blah\\\"@iana.org test122 Valid\n"
"\\\"test\\\\test\\\"@iana.org test109 Valid\n"
"\\\"test blah\\\"@iana.org test160 Valid\n\n\n"
"Invalid (as per futility) addresses that use parenthesis or quotes\n"
"==================================================================\n"
"\\\"\\\"@iana.org test31 Invalid\n"
"\\\"\\\"\\\"@iana.org test29 Invalid\n"
"\\\"\\\\\\\"@iana.org test30 Invalid\n"
"\\\"Doug \\\"Ace\\\" L.\\\"@iana.org test79 Invalid\n"
"\\\"first\\\"last\\\"@iana.org test27 Invalid\n"
"\\\"first\\\\\\\\\\\"last\\\"@iana.org test142 Invalid\n"
"\\\"foo\\\"(yay)@(hoopla)[1.2.3.4] test164 Invalid\n"
"\\\"qu@iana.org test74 Invalid\n"
"\\\"test\\\"blah\\\"@iana.org test126 Invalid\n"
"\\\"test\\\"test\\\"@iana.org test110 Invalid\n"
"\\\"test\\ blah\\\"@iana.org test159 Invalid\n"
"\\\"test blah\\\"@iana.org test124 Invalid\n"
"\\\"Unicode NULL \\u0000\\\"@char.com test227 Invalid\n"
"a(a(b(c)d(e(f))g)(h(i)j)@iana.org test187 Invalid\n"
"cal(foo(bar)@iamcal.com test168 Invalid\n"
"cal(foo)bar)@iamcal.com test196 Invalid\n"
"cal(foo\\)@iamcal.com test170 Invalid\n"
"Doug\\\\ \\\\\\\"Ace\\\\\\\"\\\\ L\\\\.@iana.org test80 Invalid\n"
"Doug\\\\ \\\\\\\"Ace\\\\\\\"\\\\ Lovell@iana.org test67 Invalid\n"
"first.\\\"\\\".last@iana.org test153 Invalid")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html