Python Beginner将String分成两个字符串

时间:2015-05-04 14:31:18

标签: python string split string-split

我有一个IP范围192.0.0.2-4作为字符串,并希望将其拆分为两个新字符串

ip_start = '192.0.0.2'
ip_end = '192.0.0.4'

所以我必须在"-"中搜索"192.0.0.2-4"并在那里拆分,但是如何制作第二个字符串呢?

3 个答案:

答案 0 :(得分:5)

如果范围始终限制在地址的最后一个字节(八位位组),则在地址的最后一个点上拆分并将其替换为您的结束值:

ip_start, _, end_value = iprange.partition('-')
first_three = ip_start.rpartition('.')[0]
ip_end = '{}.{}'.format(first_three, end_value)

我在这里使用str.partition()str.rpartition(),因为您只需要拆分一次;对于那种情况,这些方法要快一些。方法总是返回3个字符串;分区字符串之前的所有内容,分区字符串本身以及之后的所有内容。因为我们只需要.分区的第一个字符串,所以我在那里使用索引来选择它进行分配。

由于您不需要保留该破折号或点,我将其分配给名为_的变量;这只是一个惯例,用来表示你完全忽略这个价值。

演示:

>>> iprange = '192.0.0.2-4'
>>> iprange.partition('-')
('192.0.0.2', '-', '4')
>>> iprange.partition('-')[0].rpartition('.')
('192.0.0', '.', '2')
>>> ip_start, _, end_value = iprange.partition('-')
>>> first_three = ip_start.rpartition('.')[0]
>>> ip_end = '{}.{}'.format(first_three, end_value)
>>> ip_start
'192.0.0.2'
>>> ip_end
'192.0.0.4'

为了完整起见:您还可以使用str.rsplit() method从右侧拆分字符串,但在这种情况下您需要包含限制:

>>> first.rsplit('.', 1)
['192.0.0', '2']

此处第二个参数1将分割限制为找到的第一个.点。

答案 1 :(得分:1)

你可以使用" first"中的一个来构建第二个字符串。 IP地址。

>>> def getIPsFromClassCRange(ip_range):
...     # first split up the string like you did
...     tmp = ip_range.split("-")
...     # get the fix part of the IP address
...     classC = tmp[0].rsplit(".", 1)[0]
...     # append the ending IP address
...     tmp[1] = "%s.%s" % (classC, tmp[1])
...     # return start and end ip as a useful tuple
...     return (tmp[0], tmp[1])
...
>>> getIPsFromClassCRange("192.0.0.2-4")
('192.0.0.2', '192.0.0.4')

答案 2 :(得分:0)

这是3步解决方案, 使用generator expression

def ip_bounds(ip_string):
    """Splits ip address range like '192.0.0.2-4'
    into two ip addresses : '192.0.0.2','192.0.0.4'"""

    # split ip address with last '.' 
    ip_head, ip_tail = ip_string.rsplit('.', 1)

    # split last part with '-'
    ip_values = ip_tail.split('-')

    # create an ip address for each value
    return tuple('{}.{}'.format(ip_head,i) for i in ip_values)

ip_start, ip_end = ip_bounds('192.0.0.2-4')
assert ip_start == '192.0.0.2'
assert ip_end == '192.0.0.4'