我有一个看起来像“ -2--1”的字符串,这表示我的问题是从-2到-1。我想从字符串访问这两个数字。在这种情况下,str.split(“-”)无效。我有什么选择?
编辑:我也可以有一个字符串,例如'2-5',表示2到5(在这种情况下,我需要提取2和5)或类似'-2-5'的字符串,这意味着- 2到5(在这种情况下,-2和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))
它还将处理多个否定...。