RFC1918 defines private IPv4 addresses as those that fall within any of the following ranges:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 -
The following regexp should work:
^(?:10|127|172\.(?:1[6-9]|2[0-9]|3[01])|192\.168)\..*
DEMO
(?:(?:192\.)(?:(?:168\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:10\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:172\.)(?:(?:1[6-9]|2[0-9]|3[0-1])\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))
This regex works for fetching all private ips from a string. Demo can be found here
In Python 3.3+ (you did not specify a version, nor why regular expressions are a requirement, so I’ll put this here for completeness), you can:
import ipaddress
addr_string = # string with your IP address
try:
addr = ipaddress.IPv4Address(addr_string)
except ValueError:
raise # not an IP address
if addr.is_private:
pass # is a private address
See also: ipaddress module documentation