# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"(https?\:\/\/(?:[[:alnum:]]+\.)?[[:alnum:]]+\.(?:com|net|org)\/\S*)|(https?\:\/\/(?:\d{1,3}\.){3}\d{1,3}\/?(?:\:\d{0,6})?\/?)"
test_str = ("Screen 0: minimum 320 x 200, current 3520 x 1080, maximum 8192 x 8192\n"
"VGA-0 connected 1600x900+1920+180 (normal left inverted right x axis y axis) 443mm x 249mm\n"
" 1600x900 60.00*+ 75.00 \n"
" 1280x1024 75.02 70.00 60.02 \n"
" 1440x900 59.89 \n"
" 1280x800 59.81 \n"
" 1152x864 75.00 \n"
" 1280x720 59.97 \n"
" 1024x768 75.08 70.07 60.00 \n"
" 832x624 74.55 \n"
" 800x600 72.19 75.00 60.32 56.25 \n"
" 640x480 75.00 72.81 60.00 \n"
" 720x400 70.08 \n"
"LVDS connected (normal left inverted right x axis y axis)\n"
" 1366x768 59.97 +\n"
" 1280x720 59.86 \n"
" 1152x768 59.78 \n"
" 1024x768 59.92 \n"
" 800x600 59.86 \n"
" 848x480 59.66 \n"
" 720x480 59.71 \n"
" 640x480 59.38 \n"
"HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 1150mm x 650mm\n"
" 1360x768 60.02 +\n"
" 1920x1080 60.00* 59.94 30.00 24.00 29.97 23.98 \n"
" 1920x1080i 60.00 59.94 \n"
" 1280x1024 60.02 \n"
" 1280x720 60.00 59.94 \n"
" 1024x768 60.00 \n"
" 800x600 60.32 \n"
" 720x480 60.00 59.94 \n"
" 640x480 60.00 59.94 59.94 \n"
" 720x400 70.08 \n\n\n"
"https://www.example.com/foo/?bar=baz&inga=42&quux\n"
"http://✪df.ws/123\n"
"http://userid:password@example.com:8080\n"
"http://userid:password@example.com:8080/\n"
"http://userid@example.com\n"
"http://userid@example.com/\n"
"http://userid@example.com:8080\n"
"http://userid@example.com:8080/\n"
"http://userid:password@example.com\n"
"http://userid:password@example.com/\n"
"http://142.42.1.1/\n"
"http://142.42.1.1:8080/\n"
"http://➡.ws/䨹\n"
"http://⌘.ws\n"
"http://⌘.ws/\n"
"http://foo.com/blah_(wikipedia)#cite-1\n"
"http://foo.com/blah_(wikipedia)_blah#cite-1\n"
"http://foo.com/unicode_(✪)_in_parens\n"
"http://foo.com/(something)?after=parens\n"
"http://☺.damowmow.com/\n"
"http://code.google.com/events/#&product=browser\n"
"http://j.mp\n"
"ftp://foo.com/baz\n"
"http://foo.bar/?q=Test%20URL-encoded%20stuff\n"
"http://مثال.إختبار\n"
"http://例子.测试\n"
"http://उदाहरण.परीक्षा\n"
"http://-.~_!$&'()*+,;=:%40:80%2f::::::@example.com\n"
"http://1337.net\n"
"http://a.b-c.de\n"
"http://223.255.255.254\n\n"
"SHOULD NOT MATCH:\n\n"
"http://\n"
"http://.\n"
"http://..\n"
"http://../\n"
"http://?\n"
"http://??\n"
"http://??/\n"
"http://#\n"
"http://##\n"
"http://##/\n"
"http://foo.bar?q=Spaces should be encoded\n"
"//\n"
"//a\n"
"///a\n"
"///\n"
"http:///a\n"
"foo.com\n"
"rdar://1234\n"
"h://test\n"
"http:// shouldfail.com\n"
":// should fail\n"
"http://foo.bar/foo(bar)baz quux\n"
"ftps://foo.bar/\n"
"http://-error-.invalid/\n"
"http://a.b--c.de/\n"
"http://-a.b.co\n"
"http://a.b-.co\n"
"http://0.0.0.0 \n"
"http://10.1.1.0\n"
"http://10.1.1.255\n"
"http://224.1.1.1\n"
"http://1.1.1.1.1\n"
"http://123.123.123\n"
"http://3628126748\n"
"http://.www.foo.bar/\n"
"http://www.foo.bar./\n"
"http://.www.foo.bar./\n"
"http://10.1.1.1\n\n")
matches = re.finditer(regex, test_str)
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