使用正则表达式提取字符串

时间:2013-12-17 05:57:24

标签: python regex

我需要从以下字符串中提取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中使用正则表达式?

3 个答案:

答案 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

Python代码

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)

此正则表达式将匹配(^[^.]+

Regular expression visualization

所以试试这个:

import re

string = "ec2-54-196-170-182.compute-1.amazonaws.com"
ip = re.findall('^[^.]+',string)[0]
print ip

输出:

ec2-54-196-170-182

最好的事情是,即使实例是ec2ec3,这也会匹配,所以这个正则表达式实际上非常类似于@mgilson的代码