将'-2--1'分为-2和-1

时间:2018-11-17 03:02:06

标签: python python-3.x split

我有一个看起来像“ -2--1”的字符串,这表示我的问题是从-2到-1。我想从字符串访问这两个数字。在这种情况下,str.split(“-”)无效。我有什么选择?

编辑:我也可以有一个字符串,例如'2-5',表示2到5(在这种情况下,我需要提取2和5)或类似'-2-5'的字符串,这意味着- 2到5(在这种情况下,-2和5是重要数字)。

5 个答案:

答案 0 :(得分:2)

如果总是会有双破折号--,则可以这样做。

s = '-2--1'
s.replace('--',' -').split(' ') # ['-2', '-1']

答案 1 :(得分:2)

您可以使用正则表达式查找所有数字。

>>> import re 
>>> re.findall(r'-?\d+', '-2--1')
['-2', '-1']

这将适用于数字之间的任何字符。例如

>>> re.findall(r'-?\d+', '-2---$&234---1')
['-2', '234', '-1']

但是,在数字将其变为负数之前,它假定-

答案 2 :(得分:2)

import re
s = '-1--2'
result = [int(d) for d in re.findall(r'-?\d+', s)]

答案 3 :(得分:1)

在数字后接连字符:

def splitrange(s):
    return re.split(r'(?<=\d)-', s)

演示:

>>> splitrange('-2--5')
['-2', '-5']
>>> splitrange('-2-5')
['-2', '5']
>>> splitrange('2-5')
['2', '5']
>>> splitrange('2--5')
['2', '-5']

答案 4 :(得分:0)

分割数字:

split= str.split('-')

应用否定的功能:

def actual(ns, minus=False):
    if not ns:
        return
    n, *rest = ns
    if n == '':
        yield from actual(rest, not minus)
        return
    yield -int(n) if minus else int(n)
    yield from actual(rest)

现在您可以实现:

numbers = list(actual(split))

它还将处理多个否定...。