# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"^((a1|c1|c3|c4|c5|c5a|c5ad|c5d|c5n|c6a|c6g|c6gd|c6gn|c6i|c6id|c7g|cc2|d2|d3|d3en|dl1|f1|g2|g3|g3s|g4ad|g4dn|g5|g5g|h1|i2|i3|i3en|i4i|im4gn|inf1|is4gen|m1|m2|m3|m4|m5|m5a|m5ad|m5d|m5dn|m5n|m5zn|m6a|m6g|m6gd|m6i|m6id|mac1|mac2|p2|p3|p3dn|p4d|r3|r4|r5|r5a|r5ad|r5b|r5d|r5dn|r5n|r6a|r6g|r6gd|r6i|r6id|t1|t2|t3|t3a|t4g|trn1|u-12tb1|u-3tb1|u-6tb1|u-9tb1|vt1|x1|x1e|x2gd|x2idn|x2iedn|x2iezn|z1d)\.(10xlarge|112xlarge|12xlarge|16xlarge|18xlarge|24xlarge|2xlarge|32xlarge|3xlarge|48xlarge|4xlarge|56xlarge|6xlarge|8xlarge|9xlarge|large|medium|metal|micro|nano|small|xlarge))"
test_str = ("t1.micro\n"
"t2.nano\n"
"t2.micro\n"
"t2.small\n"
"t2.medium\n"
"t2.large\n"
"t2.xlarge\n"
"t2.2xlarge\n"
"t3.nano\n"
"t3.micro\n"
"t3.small\n"
"t3.medium\n"
"t3.large\n"
"t3.xlarge\n"
"t3.2xlarge\n"
"a1.medium\n"
"a1.large\n"
"a1.xlarge\n"
"a1.2xlarge\n"
"a1.4xlarge\n"
"a1.metal\n"
"c1.medium\n"
"c1.xlarge\n"
"c3.large\n"
"c3.xlarge\n"
"c3.2xlarge\n"
"c3.4xlarge\n"
"c3.8xlarge\n"
"c4.large\n"
"c4.xlarge\n"
"c4.2xlarge\n"
"c4.4xlarge\n"
"c4.8xlarge\n"
"c5.large\n"
"c5.xlarge\n"
"c5.2xlarge\n"
"c5.4xlarge\n"
"c5.9xlarge\n"
"c5.12xlarge\n"
"c5.18xlarge\n"
"c5.24xlarge\n"
"c5.metal\n"
"c5a.large\n"
"c5a.xlarge\n"
"c5a.2xlarge\n"
"c5a.4xlarge\n"
"c5a.8xlarge\n"
"c5a.12xlarge\n"
"c5a.16xlarge\n"
"c5a.24xlarge\n"
"c5ad.large\n"
"c5ad.xlarge\n"
"c5ad.2xlarge\n"
"c5ad.4xlarge\n"
"c5ad.8xlarge\n"
"c5ad.12xlarge\n"
"c5ad.16xlarge\n"
"c5ad.24xlarge\n"
"c5d.large\n"
"c5d.xlarge\n"
"c5d.2xlarge\n"
"c5d.4xlarge\n"
"c5d.9xlarge\n"
"c5d.12xlarge\n"
"c5d.18xlarge\n"
"c5d.24xlarge\n"
"c5d.metal\n"
"c5n.large\n"
"c5n.xlarge\n"
"c5n.2xlarge\n"
"c5n.4xlarge\n"
"c5n.9xlarge\n"
"c5n.18xlarge\n"
"c5n.metal\n"
"c6a.large\n"
"c6a.xlarge\n"
"c6a.2xlarge\n"
"c6a.4xlarge\n"
"c6a.8xlarge\n"
"c6a.12xlarge\n"
"c6a.16xlarge\n"
"c6a.24xlarge\n"
"c6a.32xlarge\n"
"c6a.48xlarge\n"
"c6a.metal\n"
"c6g.medium\n"
"c6g.large\n"
"c6g.xlarge\n"
"c6g.2xlarge\n"
"c6g.4xlarge\n"
"c6g.8xlarge\n"
"c6g.12xlarge\n"
"c6g.16xlarge\n"
"c6g.metal\n"
"c6gd.medium\n"
"c6gd.large\n"
"c6gd.xlarge\n"
"c6gd.2xlarge\n"
"c6gd.4xlarge\n"
"c6gd.8xlarge\n"
"c6gd.12xlarge\n"
"c6gd.16xlarge\n"
"c6gd.metal\n"
"c6gn.medium\n"
"c6gn.large\n"
"c6gn.xlarge\n"
"c6gn.2xlarge\n"
"c6gn.4xlarge\n"
"c6gn.8xlarge\n"
"c6gn.12xlarge\n"
"c6gn.16xlarge\n"
"c6i.large\n"
"c6i.xlarge\n"
"c6i.2xlarge\n"
"c6i.4xlarge\n"
"c6i.8xlarge\n"
"c6i.12xlarge\n"
"c6i.16xlarge\n"
"c6i.24xlarge\n"
"c6i.32xlarge\n"
"c6i.metal\n"
"c6id.large\n"
"c6id.xlarge\n"
"c6id.2xlarge\n"
"c6id.4xlarge\n"
"c6id.8xlarge\n"
"c6id.12xlarge\n"
"c6id.16xlarge\n"
"c6id.24xlarge\n"
"c6id.32xlarge\n"
"c6id.metal\n"
"c7g.medium\n"
"c7g.large\n"
"c7g.xlarge\n"
"c7g.2xlarge\n"
"c7g.4xlarge\n"
"c7g.8xlarge\n"
"c7g.12xlarge\n"
"c7g.16xlarge\n"
"cc2.8xlarge\n"
"d2.xlarge\n"
"d2.2xlarge\n"
"d2.4xlarge\n"
"d2.8xlarge\n"
"d3.xlarge\n"
"d3.2xlarge\n"
"d3.4xlarge\n"
"d3.8xlarge\n"
"d3en.xlarge\n"
"d3en.2xlarge\n"
"d3en.4xlarge\n"
"d3en.6xlarge\n"
"d3en.8xlarge\n"
"d3en.12xlarge\n"
"dl1.24xlarge\n"
"f1.2xlarge\n"
"f1.4xlarge\n"
"f1.16xlarge\n"
"g2.2xlarge\n"
"g2.8xlarge\n"
"g3.4xlarge\n"
"g3.8xlarge\n"
"g3.16xlarge\n"
"g3s.xlarge\n"
"g4ad.xlarge\n"
"g4ad.2xlarge\n"
"g4ad.4xlarge\n"
"g4ad.8xlarge\n"
"g4ad.16xlarge\n"
"g4dn.xlarge\n"
"g4dn.2xlarge\n"
"g4dn.4xlarge\n"
"g4dn.8xlarge\n"
"g4dn.12xlarge\n"
"g4dn.16xlarge\n"
"g4dn.metal\n"
"g5.xlarge\n"
"g5.2xlarge\n"
"g5.4xlarge\n"
"g5.8xlarge\n"
"g5.12xlarge\n"
"g5.16xlarge\n"
"g5.24xlarge\n"
"g5.48xlarge\n"
"g5g.xlarge\n"
"g5g.2xlarge\n"
"g5g.4xlarge\n"
"g5g.8xlarge\n"
"g5g.16xlarge\n"
"g5g.metal\n"
"h1.2xlarge\n"
"h1.4xlarge\n"
"h1.8xlarge\n"
"h1.16xlarge\n"
"i2.xlarge\n"
"i2.2xlarge\n"
"i2.4xlarge\n"
"i2.8xlarge\n"
"i3.large\n"
"i3.xlarge\n"
"i3.2xlarge\n"
"i3.4xlarge\n"
"i3.8xlarge\n"
"i3.16xlarge\n"
"i3.metal\n"
"i3en.large\n"
"i3en.xlarge\n"
"i3en.2xlarge\n"
"i3en.3xlarge\n"
"i3en.6xlarge\n"
"i3en.12xlarge\n"
"i3en.24xlarge\n"
"i3en.metal\n"
"i4i.large\n"
"i4i.xlarge\n"
"i4i.2xlarge\n"
"i4i.4xlarge\n"
"i4i.8xlarge\n"
"i4i.16xlarge\n"
"i4i.32xlarge\n"
"i4i.metal\n"
"im4gn.large\n"
"im4gn.xlarge\n"
"im4gn.2xlarge\n"
"im4gn.4xlarge\n"
"im4gn.8xlarge\n"
"im4gn.16xlarge\n"
"inf1.xlarge\n"
"inf1.2xlarge\n"
"inf1.6xlarge\n"
"inf1.24xlarge\n"
"is4gen.medium\n"
"is4gen.large\n"
"is4gen.xlarge\n"
"is4gen.2xlarge\n"
"is4gen.4xlarge\n"
"is4gen.8xlarge\n"
"m1.small\n"
"m1.medium\n"
"m1.large\n"
"m1.xlarge\n"
"m2.xlarge\n"
"m2.2xlarge\n"
"m2.4xlarge\n"
"m3.medium\n"
"m3.large\n"
"m3.xlarge\n"
"m3.2xlarge\n"
"m4.large\n"
"m4.xlarge\n"
"m4.2xlarge\n"
"m4.4xlarge\n"
"m4.10xlarge\n"
"m4.16xlarge\n"
"m5.large\n"
"m5.xlarge\n"
"m5.2xlarge\n"
"m5.4xlarge\n"
"m5.8xlarge\n"
"m5.12xlarge\n"
"m5.16xlarge\n"
"m5.24xlarge\n"
"m5.metal\n"
"m5a.large\n"
"m5a.xlarge\n"
"m5a.2xlarge\n"
"m5a.4xlarge\n"
"m5a.8xlarge\n"
"m5a.12xlarge\n"
"m5a.16xlarge\n"
"m5a.24xlarge\n"
"m5ad.large\n"
"m5ad.xlarge\n"
"m5ad.2xlarge\n"
"m5ad.4xlarge\n"
"m5ad.8xlarge\n"
"m5ad.12xlarge\n"
"m5ad.16xlarge\n"
"m5ad.24xlarge\n"
"m5d.large\n"
"m5d.xlarge\n"
"m5d.2xlarge\n"
"m5d.4xlarge\n"
"m5d.8xlarge\n"
"m5d.12xlarge\n"
"m5d.16xlarge\n"
"m5d.24xlarge\n"
"m5d.metal\n"
"m5dn.large\n"
"m5dn.xlarge\n"
"m5dn.2xlarge\n"
"m5dn.4xlarge\n"
"m5dn.8xlarge\n"
"m5dn.12xlarge\n"
"m5dn.16xlarge\n"
"m5dn.24xlarge\n"
"m5dn.metal\n"
"m5n.large\n"
"m5n.xlarge\n"
"m5n.2xlarge\n"
"m5n.4xlarge\n"
"m5n.8xlarge\n"
"m5n.12xlarge\n"
"m5n.16xlarge\n"
"m5n.24xlarge\n"
"m5n.metal\n"
"m5zn.large\n"
"m5zn.xlarge\n"
"m5zn.2xlarge\n"
"m5zn.3xlarge\n"
"m5zn.6xlarge\n"
"m5zn.12xlarge\n"
"m5zn.metal\n"
"m6a.large\n"
"m6a.xlarge\n"
"m6a.2xlarge\n"
"m6a.4xlarge\n"
"m6a.8xlarge\n"
"m6a.12xlarge\n"
"m6a.16xlarge\n"
"m6a.24xlarge\n"
"m6a.32xlarge\n"
"m6a.48xlarge\n"
"m6a.metal\n"
"m6g.medium\n"
"m6g.large\n"
"m6g.xlarge\n"
"m6g.2xlarge\n"
"m6g.4xlarge\n"
"m6g.8xlarge\n"
"m6g.12xlarge\n"
"m6g.16xlarge\n"
"m6g.metal\n"
"m6gd.medium\n"
"m6gd.large\n"
"m6gd.xlarge\n"
"m6gd.2xlarge\n"
"m6gd.4xlarge\n"
"m6gd.8xlarge\n"
"m6gd.12xlarge\n"
"m6gd.16xlarge\n"
"m6gd.metal\n"
"m6i.large\n"
"m6i.xlarge\n"
"m6i.2xlarge\n"
"m6i.4xlarge\n"
"m6i.8xlarge\n"
"m6i.12xlarge\n"
"m6i.16xlarge\n"
"m6i.24xlarge\n"
"m6i.32xlarge\n"
"m6i.metal\n"
"m6id.large\n"
"m6id.xlarge\n"
"m6id.2xlarge\n"
"m6id.4xlarge\n"
"m6id.8xlarge\n"
"m6id.12xlarge\n"
"m6id.16xlarge\n"
"m6id.24xlarge\n"
"m6id.32xlarge\n"
"m6id.metal\n"
"mac1.metal\n"
"mac2.metal\n"
"p2.xlarge\n"
"p2.8xlarge\n"
"p2.16xlarge\n"
"p3.2xlarge\n"
"p3.8xlarge\n"
"p3.16xlarge\n"
"p3dn.24xlarge\n"
"p4d.24xlarge\n"
"r3.large\n"
"r3.xlarge\n"
"r3.2xlarge\n"
"r3.4xlarge\n"
"r3.8xlarge\n"
"r4.large\n"
"r4.xlarge\n"
"r4.2xlarge\n"
"r4.4xlarge\n"
"r4.8xlarge\n"
"r4.16xlarge\n"
"r5.large\n"
"r5.xlarge\n"
"r5.2xlarge\n"
"r5.4xlarge\n"
"r5.8xlarge\n"
"r5.12xlarge\n"
"r5.16xlarge\n"
"r5.24xlarge\n"
"r5.metal\n"
"r5a.large\n"
"r5a.xlarge\n"
"r5a.2xlarge\n"
"r5a.4xlarge\n"
"r5a.8xlarge\n"
"r5a.12xlarge\n"
"r5a.16xlarge\n"
"r5a.24xlarge\n"
"r5ad.large\n"
"r5ad.xlarge\n"
"r5ad.2xlarge\n"
"r5ad.4xlarge\n"
"r5ad.8xlarge\n"
"r5ad.12xlarge\n"
"r5ad.16xlarge\n"
"r5ad.24xlarge\n"
"r5b.large\n"
"r5b.xlarge\n"
"r5b.2xlarge\n"
"r5b.4xlarge\n"
"r5b.8xlarge\n"
"r5b.12xlarge\n"
"r5b.16xlarge\n"
"r5b.24xlarge\n"
"r5b.metal\n"
"r5d.large\n"
"r5d.xlarge\n"
"r5d.2xlarge\n"
"r5d.4xlarge\n"
"r5d.8xlarge\n"
"r5d.12xlarge\n"
"r5d.16xlarge\n"
"r5d.24xlarge\n"
"r5d.metal\n"
"r5dn.large\n"
"r5dn.xlarge\n"
"r5dn.2xlarge\n"
"r5dn.4xlarge\n"
"r5dn.8xlarge\n"
"r5dn.12xlarge\n"
"r5dn.16xlarge\n"
"r5dn.24xlarge\n"
"r5dn.metal\n"
"r5n.large\n"
"r5n.xlarge\n"
"r5n.2xlarge\n"
"r5n.4xlarge\n"
"r5n.8xlarge\n"
"r5n.12xlarge\n"
"r5n.16xlarge\n"
"r5n.24xlarge\n"
"r5n.metal\n"
"r6a.large\n"
"r6a.xlarge\n"
"r6a.2xlarge\n"
"r6a.4xlarge\n"
"r6a.8xlarge\n"
"r6a.12xlarge\n"
"r6a.16xlarge\n"
"r6a.24xlarge\n"
"r6a.32xlarge\n"
"r6a.48xlarge\n"
"r6a.metal\n"
"r6g.medium\n"
"r6g.large\n"
"r6g.xlarge\n"
"r6g.2xlarge\n"
"r6g.4xlarge\n"
"r6g.8xlarge\n"
"r6g.12xlarge\n"
"r6g.16xlarge\n"
"r6g.metal\n"
"r6gd.medium\n"
"r6gd.large\n"
"r6gd.xlarge\n"
"r6gd.2xlarge\n"
"r6gd.4xlarge\n"
"r6gd.8xlarge\n"
"r6gd.12xlarge\n"
"r6gd.16xlarge\n"
"r6gd.metal\n"
"r6i.large\n"
"r6i.xlarge\n"
"r6i.2xlarge\n"
"r6i.4xlarge\n"
"r6i.8xlarge\n"
"r6i.12xlarge\n"
"r6i.16xlarge\n"
"r6i.24xlarge\n"
"r6i.32xlarge\n"
"r6i.metal\n"
"r6id.large\n"
"r6id.xlarge\n"
"r6id.2xlarge\n"
"r6id.4xlarge\n"
"r6id.8xlarge\n"
"r6id.12xlarge\n"
"r6id.16xlarge\n"
"r6id.24xlarge\n"
"r6id.32xlarge\n"
"r6id.metal\n"
"t3a.nano\n"
"t3a.micro\n"
"t3a.small\n"
"t3a.medium\n"
"t3a.large\n"
"t3a.xlarge\n"
"t3a.2xlarge\n"
"t4g.nano\n"
"t4g.micro\n"
"t4g.small\n"
"t4g.medium\n"
"t4g.large\n"
"t4g.xlarge\n"
"t4g.2xlarge\n"
"trn1.2xlarge\n"
"trn1.32xlarge\n"
"u-12tb1.112xlarge\n"
"u-3tb1.56xlarge\n"
"u-6tb1.56xlarge\n"
"u-6tb1.112xlarge\n"
"u-9tb1.112xlarge\n"
"vt1.3xlarge\n"
"vt1.6xlarge\n"
"vt1.24xlarge\n"
"x1.16xlarge\n"
"x1.32xlarge\n"
"x1e.xlarge\n"
"x1e.2xlarge\n"
"x1e.4xlarge\n"
"x1e.8xlarge\n"
"x1e.16xlarge\n"
"x1e.32xlarge\n"
"x2gd.medium\n"
"x2gd.large\n"
"x2gd.xlarge\n"
"x2gd.2xlarge\n"
"x2gd.4xlarge\n"
"x2gd.8xlarge\n"
"x2gd.12xlarge\n"
"x2gd.16xlarge\n"
"x2gd.metal\n"
"x2idn.16xlarge\n"
"x2idn.24xlarge\n"
"x2idn.32xlarge\n"
"x2idn.metal\n"
"x2iedn.xlarge\n"
"x2iedn.2xlarge\n"
"x2iedn.4xlarge\n"
"x2iedn.8xlarge\n"
"x2iedn.16xlarge\n"
"x2iedn.24xlarge\n"
"x2iedn.32xlarge\n"
"x2iedn.metal\n"
"x2iezn.2xlarge\n"
"x2iezn.4xlarge\n"
"x2iezn.6xlarge\n"
"x2iezn.8xlarge\n"
"x2iezn.12xlarge\n"
"x2iezn.metal\n"
"z1d.large\n"
"z1d.xlarge\n"
"z1d.2xlarge\n"
"z1d.3xlarge\n"
"z1d.6xlarge\n"
"z1d.12xlarge\n"
"z1d.metal")
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