# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"\s*(\d+)\s+((([0-9a-zA-Z-.]+)\s*(\([0-9.]+\))?((\s*(([0-9.]+\s+ms+|[*])\s?))+))*)$"
test_str = (" 1 rbx1-3b-a9.fr.eu (91.121.19.253) 1.648 ms 3.061 ms 3.220 ms\n"
" 2 be11-315.rbx-g2-a9.fr.eu (37.187.231.107) 0.763 ms be11-315.rbx-g1-a9.fr.eu (37.187.231.105) 0.821 ms be11-146.rbx-g2-a9.fr.eu (37.187.231.97) 1.300 ms\n"
" 3 be100-1120.fra-5-a9.de.eu (37.187.232.96) 12.250 ms be100-1105.fra-1-a9.de.eu (37.187.232.88) 12.354 ms be100-1120.fra-5-a9.de.eu (37.187.232.96) 12.293 ms\n"
" 4 r2223.bee.lt (80.81.194.118) 42.643 ms 42.734 ms 42.870 ms\n"
" 5 213.252.224.238 (213.252.224.238) 43.368 ms 43.399 ms 84.15.6.226 (84.15.6.226) 43.676 ms\n"
" 6 84.15.6.226 (84.15.6.226) 43.460 ms 213.226.129.50 (213.226.129.50) 40.203 ms 84.15.6.226 (84.15.6.226) 43.329 ms\n"
" 7 s1v3.e-lietuva.lt (141.136.40.34) 40.225 ms 213.226.129.50 (213.226.129.50) 40.106 ms * 40.082 ms\n\n\n\n\n"
" 1 10.44.17.1 1.867 ms 2.184 ms 2.505 ms\n"
" 2 10.44.23.194 0.519 ms 0.527 ms 0.552 ms\n"
" 3 149.255.125.81 2.775 ms 2.772 ms 2.753 ms\n"
" 4 149.255.121.65 3.248 ms 3.248 ms 3.230 ms\n"
" 5 95.141.160.10 3.726 ms 4.469 ms 4.496 ms\n"
" 6 95.141.175.57 4.514 ms 4.187 ms 4.112 ms\n"
" 7 213.248.85.228 4.188 ms 3.066 ms 2.890 ms\n"
" 8 213.155.132.194 4.066 ms 80.91.248.217 3.944 ms 80.91.247.91 3.791 ms\n"
" 9 62.115.114.183 3.971 ms 62.115.137.195 3.851 ms 62.115.114.185 3.580 ms\n"
"10 213.248.96.38 3.665 ms 3.336 ms 4.168 ms\n"
"11 4.69.159.5 43.000 ms 4.69.159.13 39.696 ms 39.691 ms\n"
"12 4.69.159.1 39.746 ms 4.69.159.13 39.768 ms 4.69.159.1 37.748 ms\n"
"13 213.242.110.210 58.621 ms 58.280 ms 58.177 ms\n"
"14 213.252.224.238 52.065 ms 54.569 ms 54.523 ms\n"
"15 213.226.129.50 55.727 ms 58.060 ms 58.035 ms\n"
"16 141.136.40.34 54.680 ms 54.164 ms 52.145 ms\n\n\n"
" 1 10.44.17.1 15.972 ms 16.312 ms 16.652 ms\n"
" 2 10.44.23.194 0.715 ms 0.729 ms 0.807 ms\n"
" 3 149.255.125.81 1.180 ms 1.194 ms 1.239 ms\n"
" 4 149.255.121.65 3.089 ms 3.106 ms 3.102 ms\n"
" 5 95.141.160.10 2.996 ms 3.013 ms 3.008 ms\n"
" 6 95.141.175.57 7.785 ms 7.121 ms 7.107 ms\n"
" 7 213.248.85.228 4.309 ms 3.949 ms 3.936 ms\n"
" 8 213.155.136.76 2.880 ms 2.824 ms 2.830 ms\n"
" 9 213.155.136.97 8.128 ms 213.155.136.83 8.276 ms 213.155.130.26 8.158 ms\n"
"10 213.155.136.247 9.010 ms 62.115.116.221 9.729 ms 213.155.136.247 8.261 ms\n"
"11 195.12.255.246 9.696 ms 213.248.101.38 9.287 ms 195.12.255.246 9.531 ms\n"
"12 * * *\n"
"13 188.166.33.86 10.182 ms 9.489 ms 9.599 ms")
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