我需要从以下字符串中提取IP地址。
>>> mydns='ec2-54-196-170-182.compute-1.amazonaws.com'
需要返回点左侧的文本。以下工作符合预期。
>>> mydns[:18]
'ec2-54-196-170-182'
但它并不适用于所有情况。例如,
mydns='ec2-666-777-888-999.compute-1.amazonaws.com'
>>> mydns[:18]
'ec2-666-777-888-99'
如何在python中使用正则表达式?
答案 0 :(得分:5)
无需正则表达式...只需使用str.split
mydns.split('.', 1)[0]
演示:
>>> mydns='ec2-666-777-888-999.compute-1.amazonaws.com'
>>> mydns.split('.', 1)[0]
'ec2-666-777-888-999'
答案 1 :(得分:2)
如果您想使用正则表达式:
ec2-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3}).*
替代方案(EC2 Agnostic):
.*\b([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3}).*
常规:\1.\2.\3.\4
反向:\4.\3.\2.\1
import re
subject = 'ec2-54-196-170-182.compute-1.amazonaws.com'
result = re.sub("ec2-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3}).*", r"\1.\2.\3.\4", subject)
print result
答案 2 :(得分:2)
此正则表达式将匹配(^[^.]+
:
所以试试这个:
import re
string = "ec2-54-196-170-182.compute-1.amazonaws.com"
ip = re.findall('^[^.]+',string)[0]
print ip
输出:
ec2-54-196-170-182
最好的事情是,即使实例是ec2
,ec3
,这也会匹配,所以这个正则表达式实际上非常类似于@mgilson的代码