# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"^(a[abefkmnrsvyz]|b[aegimnors]|c[aehorsuvy]|d[aevz]|e[elnostu]|f[afijory]|g[adlnuv]|h[aeiortuyz]|i[adegikostu]|j[av]|k[agijklmnorsuvwy]|l[abginotuv]|m[ghiklnrsty]|n[abdeglnorvy]|o[cjmrs]|p[ailst]|q[u]|r[mnouw]|s[acdegiklmnoqrstuvw]|t[aeghiklnorstwy]|u[gkrz]|v[eio]|w[ao]|x[h]|y[io]|z[ahu])$"
test_str = ("aa\n"
"ab\n"
"ac\n"
"ad\n"
"ae\n"
"af\n"
"ag\n"
"ah\n"
"ai\n"
"aj\n"
"ak\n"
"al\n"
"am\n"
"an\n"
"ao\n"
"ap\n"
"aq\n"
"ar\n"
"as\n"
"at\n"
"au\n"
"av\n"
"aw\n"
"ax\n"
"ay\n"
"az\n"
"ba\n"
"bb\n"
"bc\n"
"bd\n"
"be\n"
"bf\n"
"bg\n"
"bh\n"
"bi\n"
"bj\n"
"bk\n"
"bl\n"
"bm\n"
"bn\n"
"bo\n"
"bp\n"
"bq\n"
"br\n"
"bs\n"
"bt\n"
"bu\n"
"bv\n"
"bw\n"
"bx\n"
"by\n"
"bz\n"
"ca\n"
"cb\n"
"cc\n"
"cd\n"
"ce\n"
"cf\n"
"cg\n"
"ch\n"
"ci\n"
"cj\n"
"ck\n"
"cl\n"
"cm\n"
"cn\n"
"co\n"
"cp\n"
"cq\n"
"cr\n"
"cs\n"
"ct\n"
"cu\n"
"cv\n"
"cw\n"
"cx\n"
"cy\n"
"cz\n"
"da\n"
"db\n"
"dc\n"
"dd\n"
"de\n"
"df\n"
"dg\n"
"dh\n"
"di\n"
"dj\n"
"dk\n"
"dl\n"
"dm\n"
"dn\n"
"do\n"
"dp\n"
"dq\n"
"dr\n"
"ds\n"
"dt\n"
"du\n"
"dv\n"
"dw\n"
"dx\n"
"dy\n"
"dz\n"
"ea\n"
"eb\n"
"ec\n"
"ed\n"
"ee\n"
"ef\n"
"eg\n"
"eh\n"
"ei\n"
"ej\n"
"ek\n"
"el\n"
"em\n"
"en\n"
"eo\n"
"ep\n"
"eq\n"
"er\n"
"es\n"
"et\n"
"eu\n"
"ev\n"
"ew\n"
"ex\n"
"ey\n"
"ez\n"
"fa\n"
"fb\n"
"fc\n"
"fd\n"
"fe\n"
"ff\n"
"fg\n"
"fh\n"
"fi\n"
"fj\n"
"fk\n"
"fl\n"
"fm\n"
"fn\n"
"fo\n"
"fp\n"
"fq\n"
"fr\n"
"fs\n"
"ft\n"
"fu\n"
"fv\n"
"fw\n"
"fx\n"
"fy\n"
"fz\n"
"ga\n"
"gb\n"
"gc\n"
"gd\n"
"ge\n"
"gf\n"
"gg\n"
"gh\n"
"gi\n"
"gj\n"
"gk\n"
"gl\n"
"gm\n"
"gn\n"
"go\n"
"gp\n"
"gq\n"
"gr\n"
"gs\n"
"gt\n"
"gu\n"
"gv\n"
"gw\n"
"gx\n"
"gy\n"
"gz\n"
"ha\n"
"hb\n"
"hc\n"
"hd\n"
"he\n"
"hf\n"
"hg\n"
"hh\n"
"hi\n"
"hj\n"
"hk\n"
"hl\n"
"hm\n"
"hn\n"
"ho\n"
"hp\n"
"hq\n"
"hr\n"
"hs\n"
"ht\n"
"hu\n"
"hv\n"
"hw\n"
"hx\n"
"hy\n"
"hz\n"
"ia\n"
"ib\n"
"ic\n"
"id\n"
"ie\n"
"if\n"
"ig\n"
"ih\n"
"ii\n"
"ij\n"
"ik\n"
"il\n"
"im\n"
"in\n"
"io\n"
"ip\n"
"iq\n"
"ir\n"
"is\n"
"it\n"
"iu\n"
"iv\n"
"iw\n"
"ix\n"
"iy\n"
"iz\n"
"ja\n"
"jb\n"
"jc\n"
"jd\n"
"je\n"
"jf\n"
"jg\n"
"jh\n"
"ji\n"
"jj\n"
"jk\n"
"jl\n"
"jm\n"
"jn\n"
"jo\n"
"jp\n"
"jq\n"
"jr\n"
"js\n"
"jt\n"
"ju\n"
"jv\n"
"jw\n"
"jx\n"
"jy\n"
"jz\n"
"ka\n"
"kb\n"
"kc\n"
"kd\n"
"ke\n"
"kf\n"
"kg\n"
"kh\n"
"ki\n"
"kj\n"
"kk\n"
"kl\n"
"km\n"
"kn\n"
"ko\n"
"kp\n"
"kq\n"
"kr\n"
"ks\n"
"kt\n"
"ku\n"
"kv\n"
"kw\n"
"kx\n"
"ky\n"
"kz\n"
"la\n"
"lb\n"
"lc\n"
"ld\n"
"le\n"
"lf\n"
"lg\n"
"lh\n"
"li\n"
"lj\n"
"lk\n"
"ll\n"
"lm\n"
"ln\n"
"lo\n"
"lp\n"
"lq\n"
"lr\n"
"ls\n"
"lt\n"
"lu\n"
"lv\n"
"lw\n"
"lx\n"
"ly\n"
"lz\n"
"ma\n"
"mb\n"
"mc\n"
"md\n"
"me\n"
"mf\n"
"mg\n"
"mh\n"
"mi\n"
"mj\n"
"mk\n"
"ml\n"
"mm\n"
"mn\n"
"mo\n"
"mp\n"
"mq\n"
"mr\n"
"ms\n"
"mt\n"
"mu\n"
"mv\n"
"mw\n"
"mx\n"
"my\n"
"mz\n"
"na\n"
"nb\n"
"nc\n"
"nd\n"
"ne\n"
"nf\n"
"ng\n"
"nh\n"
"ni\n"
"nj\n"
"nk\n"
"nl\n"
"nm\n"
"nn\n"
"no\n"
"np\n"
"nq\n"
"nr\n"
"ns\n"
"nt\n"
"nu\n"
"nv\n"
"nw\n"
"nx\n"
"ny\n"
"nz\n"
"oa\n"
"ob\n"
"oc\n"
"od\n"
"oe\n"
"of\n"
"og\n"
"oh\n"
"oi\n"
"oj\n"
"ok\n"
"ol\n"
"om\n"
"on\n"
"oo\n"
"op\n"
"oq\n"
"or\n"
"os\n"
"ot\n"
"ou\n"
"ov\n"
"ow\n"
"ox\n"
"oy\n"
"oz\n"
"pa\n"
"pb\n"
"pc\n"
"pd\n"
"pe\n"
"pf\n"
"pg\n"
"ph\n"
"pi\n"
"pj\n"
"pk\n"
"pl\n"
"pm\n"
"pn\n"
"po\n"
"pp\n"
"pq\n"
"pr\n"
"ps\n"
"pt\n"
"pu\n"
"pv\n"
"pw\n"
"px\n"
"py\n"
"pz\n"
"qa\n"
"qb\n"
"qc\n"
"qd\n"
"qe\n"
"qf\n"
"qg\n"
"qh\n"
"qi\n"
"qj\n"
"qk\n"
"ql\n"
"qm\n"
"qn\n"
"qo\n"
"qp\n"
"qq\n"
"qr\n"
"qs\n"
"qt\n"
"qu\n"
"qv\n"
"qw\n"
"qx\n"
"qy\n"
"qz\n"
"ra\n"
"rb\n"
"rc\n"
"rd\n"
"re\n"
"rf\n"
"rg\n"
"rh\n"
"ri\n"
"rj\n"
"rk\n"
"rl\n"
"rm\n"
"rn\n"
"ro\n"
"rp\n"
"rq\n"
"rr\n"
"rs\n"
"rt\n"
"ru\n"
"rv\n"
"rw\n"
"rx\n"
"ry\n"
"rz\n"
"sa\n"
"sb\n"
"sc\n"
"sd\n"
"se\n"
"sf\n"
"sg\n"
"sh\n"
"si\n"
"sj\n"
"sk\n"
"sl\n"
"sm\n"
"sn\n"
"so\n"
"sp\n"
"sq\n"
"sr\n"
"ss\n"
"st\n"
"su\n"
"sv\n"
"sw\n"
"sx\n"
"sy\n"
"sz\n"
"ta\n"
"tb\n"
"tc\n"
"td\n"
"te\n"
"tf\n"
"tg\n"
"th\n"
"ti\n"
"tj\n"
"tk\n"
"tl\n"
"tm\n"
"tn\n"
"to\n"
"tp\n"
"tq\n"
"tr\n"
"ts\n"
"tt\n"
"tu\n"
"tv\n"
"tw\n"
"tx\n"
"ty\n"
"tz\n"
"ua\n"
"ub\n"
"uc\n"
"ud\n"
"ue\n"
"uf\n"
"ug\n"
"uh\n"
"ui\n"
"uj\n"
"uk\n"
"ul\n"
"um\n"
"un\n"
"uo\n"
"up\n"
"uq\n"
"ur\n"
"us\n"
"ut\n"
"uu\n"
"uv\n"
"uw\n"
"ux\n"
"uy\n"
"uz\n"
"va\n"
"vb\n"
"vc\n"
"vd\n"
"ve\n"
"vf\n"
"vg\n"
"vh\n"
"vi\n"
"vj\n"
"vk\n"
"vl\n"
"vm\n"
"vn\n"
"vo\n"
"vp\n"
"vq\n"
"vr\n"
"vs\n"
"vt\n"
"vu\n"
"vv\n"
"vw\n"
"vx\n"
"vy\n"
"vz\n"
"wa\n"
"wb\n"
"wc\n"
"wd\n"
"we\n"
"wf\n"
"wg\n"
"wh\n"
"wi\n"
"wj\n"
"wk\n"
"wl\n"
"wm\n"
"wn\n"
"wo\n"
"wp\n"
"wq\n"
"wr\n"
"ws\n"
"wt\n"
"wu\n"
"wv\n"
"ww\n"
"wx\n"
"wy\n"
"wz\n"
"xa\n"
"xb\n"
"xc\n"
"xd\n"
"xe\n"
"xf\n"
"xg\n"
"xh\n"
"xi\n"
"xj\n"
"xk\n"
"xl\n"
"xm\n"
"xn\n"
"xo\n"
"xp\n"
"xq\n"
"xr\n"
"xs\n"
"xt\n"
"xu\n"
"xv\n"
"xw\n"
"xx\n"
"xy\n"
"xz\n"
"ya\n"
"yb\n"
"yc\n"
"yd\n"
"ye\n"
"yf\n"
"yg\n"
"yh\n"
"yi\n"
"yj\n"
"yk\n"
"yl\n"
"ym\n"
"yn\n"
"yo\n"
"yp\n"
"yq\n"
"yr\n"
"ys\n"
"yt\n"
"yu\n"
"yv\n"
"yw\n"
"yx\n"
"yy\n"
"yz\n"
"za\n"
"zb\n"
"zc\n"
"zd\n"
"ze\n"
"zf\n"
"zg\n"
"zh\n"
"zi\n"
"zj\n"
"zk\n"
"zl\n"
"zm\n"
"zn\n"
"zo\n"
"zp\n"
"zq\n"
"zr\n"
"zs\n"
"zt\n"
"zu\n"
"zv\n"
"zw\n"
"zx\n"
"zy\n"
"zz")
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