# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"""
A\s+change\s+to\s+
(?:(?:sub)?headings?|tariff\s+item)
\s+\d[0-9.]*
(?:\s+through\s+\d[0-9.]*)?
\s+from(?:(?:,?\s+(?:sub)?headings?\s+\d[0-9.]*)+(?:\s+or\s+\d[0-9.]*)*\s+or)?
\s+any\s+other\s+(?:heading|chapter)\.
"""
test_str = ("A change to headings 0101 through 0106 from any other chapter.\n"
"A change to subheadings 0712.20 through 0712.39 from any other chapter.\n"
"A change to heading 0903 from any other chapter.\n"
"A change to subheading 1806.20 from any other heading.\n"
"A change to subheading 1207.99 from any other chapter.\n"
"A change to heading 4302 from any other heading.\n"
"A change to subheading 4105.10 from heading 4102 or any other chapter.\n"
"A change to subheading 4105.30 from heading 4102, subheading 4105.10 or any other chapter.\n"
"A change to subheading 4106.21 from subheading 4103.10 or any other chapter.\n"
"A change to subheading 4106.22 from subheadings 4103.10 or 4106.21 or any other chapter.\n"
"A change to tariff item 7304.41.30 from subheading 7304.49 or any other chapter.")
matches = re.finditer(regex, test_str, re.MULTILINE | re.VERBOSE)
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