# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"\s+TRN\s+[a-z\d]+\s+\d+\s+(\s+\d+\s+)\w+(\s+\d{2}\w{3}\s+)\d\s([a-z]{5})\s+([a-z]{5})\s[a-z\d]+\s+[\D]+(\d{4}|\d{0})\s+(\d{4}|\d{0})"
test_str = ("4 TRN 2C 87 6628 AF 26NOV 4 FRLPD FRPLY HK1 1800 2007 \n"
"3 TRN 2C 87 5266 BI 16NOV 1 FRBOJ FRMLV HK PAST 3333 3333*\n"
"4 TRN 2C 87 5454 BI 19NOV 4 FRMLV FRBOJ HK PAST *\n"
"3 TRN 2C 87 5266 BI 16NOV 1 FRBOJ FRMLV HK PAST *\n"
"4 TRN 2C 87 5454 BI 19NOV 4 FRMLV FRBOJ HK PAST *\n"
"3 TRN 2C 87 6609 AF 23NOV 1 FRPLY FRLPD HK PAST *\n"
"4 TRN 2C 87 6628 AF 26NOV 4 FRLPD FRPLY HK1 1800 2007\n"
"3 TRN 2C 87 6817 AF 25NOV 3 FRLPD FRBZR HK1 1810 2047\n"
" FRLPD/LYON PART DIEU//FRBZR/BEZIERS /TGD *\n"
"4 TRN 2C 87 6860 AF 27NOV 5 FRBZR FRLPD HK1 1618 1850\n"
" FRBZR/BEZIERS//FRLPD/LYON PART DIEU /TGD *\n"
"3 TRN 2C 87 6201 BF 23NOV 1 FRPLY FRVLA HK PAST *\n"
"4 TRN 2C 87 6194 BF 24NOV 2 FRVAF FRPLY HK1 0843 1110\n"
" FRVAF/VALENCE VILLE//FRPLY/PARIS GARE LYON /TGD *\n"
"3 TRN 2C 87 3101 B 24NOV 2 FRPSL FRAEZ HK1 0653 0903\n"
" FRPSL/PARIS ST LAZARE//FRAEZ/LE HAVRE /TIB *\n"
"4 TRN 2C 87 3130 A 25NOV 3 FRAEZ FRPSL HK1 1757 2010\n"
" FRAEZ/LE HAVRE//FRPSL/PARIS ST LAZARE /TIB *\n"
"3 TRN 2C 87 6700 BF 26NOV 4 FRAEK FRPLY HK1 0542 0837\n"
" FRAEK/MULHOUSE VILLE//FRPLY/PARIS GARE LYON /TGD *\n"
"4 TRN 2C 87 9223 BF 27NOV 5 FRPLY FRAEK HK1 1823 2103\n"
" FRPLY/PARIS GARE LYON//FRAEK/MULHOUSE VILLE /TGL *\n"
"3 TRN 2C 87 5352 BF 26NOV 4 FRLPD FRDJU HK1 0629 0835\n"
" FRLPD/LYON PART DIEU//FRDJU/MASSY TGV /TGD *\n"
"4 TRN 2C 87 5233 BF 26NOV 4 FRDJU FRRNS HK1 1538 1747\n"
" FRDJU/MASSY TGV//FRRNS/RENNES /TGA *\n"
"5 TRN 2C 87 5346 BF 27NOV 5 FRRNS FRLPD HK1 1609 2030\n"
" FRRNS/RENNES//FRLPD/LYON PART DIEU /TGD *\n"
"3 TRN 2C 87 6602 BF 30NOV 1 FRLPD FRPLY HK1 0602 0813\n"
" FRLPD/LYON PART DIEU//FRPLY/PARIS GARE LYON /TGD *\n"
"4 TRN 2C 87 6629 BF 04DEC 5 FRPLY FRLPD HK1 1857 2057\n"
" FRPLY/PARIS GARE LYON//FRLPD/LYON PART DIEU /TGD")
matches = re.finditer(regex, test_str, re.IGNORECASE)
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