import re
regex = re.compile(r"^\s*(#*)\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+([a-zA-Z0-9\.\- ]+)([^#]*#?\w*\s*)$", flags=re.MULTILINE | re.IGNORECASE)
test_str = ("# Copyright (c) 1993-2009 Microsoft Corp.\n"
"#\n"
"# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.\n"
"#\n"
"# This file contains the mappings of IP addresses to host names. Each\n"
"# entry should be kept on an individual line. The IP address should\n"
"# be placed in the first column followed by the corresponding host name.\n"
"# The IP address and the host name should be separated by at least one\n"
"# space.\n"
"#\n"
"# Additionally, comments (such as these) may be inserted on individual\n"
"# lines or following the machine name denoted by a '#' symbol.\n"
"#\n"
"# For example:\n"
"#\n"
"# 102.54.94.97 rhino.acme.com # source server\n"
"# 38.25.63.10 x.acme.com # x client host\n\n"
"# localhost name resolution is handled within DNS itself.\n"
"# 127.0.0.1 localhost\n"
"# ::1 localhost\n\n"
"127.0.0.1 jw smartsite.jw\n"
"127.0.0.1 dev.filepresso.com dev.filepresso.com.pl dev.filepresso.pl dev.filefly.pl\n"
"#### 89.31.66.248 sp.biatelbit.pl\n\n"
"192.168.72.51 subversion.biatel.com.pl\n"
" \n"
"# 127.0.0.1 bip.smartsite.bit-sa.pl\n"
" # 127.0.0.1 bip.augustow.wrotapodlasia.pl\n"
"127.0.0.1 rpowp.smartsite.bit-sa.pl\n"
"127.0.0.1 cms.smartsite.bit-sa.pl\n"
"127.0.0.1 cms-test.smartsite.bit-sa.pl\n\n"
"############################################################ \n"
"# \n"
"# UMWP \n"
"# \n"
"############################################################ \n\n"
"############################################################ \n"
"# ST - test - UMWP \n"
"############################################################ \n"
"#10.200.14.70 ST-sapp1 \n"
"#10.200.14.70 tv.smartsite.bit-sa.pl wp.smartsite.bit-sa.pl cms.smartsite.bit-sa.pl test.smartsite.bit-sa.pl bip.smartsite.bit-sa.pl si.smartsite.bit-sa.pl sspw.wrotapodlasia.pl \n"
"#10.200.14.70 radny.smartsite.bit-sa.pl stats.smartsite.bit-sa.pl test9.smartsite.bit-sa.pl ")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
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