# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"(?<!SQ\d{0}|\d|\d{2})(51\d{14}|52\d{14}|53\d{14}|54\d{14}|55\d{14}|36\d{12}|34\d{13}|37\d{13}|4\d{15}|4\d{12}|\d{4}(-|\s)\d{4}(-|\s)\d{4}(-|\s)\d{4}|\d{3}(-|\s)\d{3}(-|\s)\d{3}(-|\s)\d{3}(-|\s)\d{3}|\d{4}(-|\s)\d{6}(-\s)\d{5}|6\d{15})"
test_str = ("<Payment>\n"
" <PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"41111111111111114222222222222\"/>\n"
"</Payment>\n"
"<PCard expiration=\"2022-04\" number=\"4005-5511-2233-4450\"/>\n"
"<Payment>\n"
"Space\n"
"<PCard expiration=\"2022-04\" number=\"4005 5511 2233 4450\"/>\n"
"Tab space\n"
"<PCard expiration=\"2022-04\" number=\"4005 551122334450\"/>\n"
"<PCard expiration=\"2022-04\" number=\"4005 5511 2233 4450\"/>\n"
"new line\n"
"<PCard expiration=\"2022-04\" number=\"4005400540054005\"/>\n"
"<PCard expiration=\"2022-04\" number=\"4005 5511 2233 4450\"/>\n"
"carriage return\n"
"<PCard expiration=\"2022-04\" number=\"4005 5511 2233 4450\"/>\n"
"</Payment>\n"
"combination of\n"
"<Payment>\n"
" <PCard expiration=\"2022-04\" number=\"4005- 5511 -2233-4450\"/>\n"
"</Payment>\n\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"4255726800010\"/>\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"@#@@@$@4255726800010\"/>\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"SQ#4255726800010\"/>\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"45a$4255726800010\"/>\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"12SQ%4255726800010\"/>\n\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"4255726800010@121212\"/>\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"4255726800010#SQ\"/>\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"4255726800010$a54\"/>\n"
"<PCard expiration=\"2061-04-00\" name=\"Grainger AB\" number=\"4255726800010%SQ12\"/>\n\n"
"<SupplierPartID>4222222222222</SupplierPartID>\n"
"<SupplierPartID> 4222222222222</SupplierPartID>\n"
"<SupplierPartID>SQ4222222222222</SupplierPartID> \n"
"<SupplierPartID>SQ134222222222222</SupplierPartID> \n"
"<SupplierPartAuxiliaryID>WWGSQ134256726800010</SupplierPartAuxiliaryID>\n")
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