从字符串中提取所有数字及其符号-Python 2.7

从字符串中提取所有数字及其符号-Python 2.7,python,regex,python-2.7,Python,Regex,Python 2.7,如何提取所有数字和符号 字符串可以是这样的 -1+110,+20-123和+23-432-543 我正在使用这个简单的正则表达式 event_book_value = re.findall('\d+', event_book_value) 它返回数字,但不随符号一起返回。在数字正则表达式前面添加可选符号: [+-]?\d+ [+-]-匹配单个+或- ?-使上一次匹配一次或零次 \d+-一个或多个数字 在数字regex前面添加可选标志: [+-]?\d+ [+-]-匹配单个+或- ?-

如何提取所有数字和符号

字符串可以是这样的
-1+110
+20-123
+23-432-543

我正在使用这个简单的正则表达式

event_book_value = re.findall('\d+', event_book_value)

它返回数字,但不随符号一起返回。

在数字正则表达式前面添加可选符号:

[+-]?\d+
  • [+-]
    -匹配单个
    +
    -
  • -使上一次匹配一次或零次
  • \d+
    -一个或多个数字

在数字regex前面添加可选标志:

[+-]?\d+
  • [+-]
    -匹配单个
    +
    -
  • -使上一次匹配一次或零次
  • \d+
    -一个或多个数字

类似这样的内容:

def signSplit(string):
    nums = []
    cur = ""
    signs = "+-"
    for c in string:
        if c in signs:
            if cur:#if there is a number (so not the very beginning) then add it to nums
                nums.append(cur)
            cur = c #start out with the cur storing the sign
        elif c.isdigit():
            cur+=c
        else:
            raise ValueError("unrecognised character: %r"%c)
    nums.append(cur)
    return nums


print(signSplit("+23-432-543"))
对于您的需要,它可能太慢了,但它在纯python中工作,因此以后很容易进行编辑。

类似于以下内容:

def signSplit(string):
    nums = []
    cur = ""
    signs = "+-"
    for c in string:
        if c in signs:
            if cur:#if there is a number (so not the very beginning) then add it to nums
                nums.append(cur)
            cur = c #start out with the cur storing the sign
        elif c.isdigit():
            cur+=c
        else:
            raise ValueError("unrecognised character: %r"%c)
    nums.append(cur)
    return nums


print(signSplit("+23-432-543"))

对于您的需要,它可能太慢了,但它在纯python中工作,因此以后很容易进行编辑。

谢谢。它起作用了。你能展示更多的
的例子吗?
签名。。。它是如何工作的。。。有点困惑that@Umair,我放置了
,这样,如果有没有符号的数字,您仍然可以匹配。它基本上使前面的事情成为可选的。换句话说-
xy?z
将匹配
xyz
xz
。谢谢。它起作用了。你能展示更多的
的例子吗?
签名。。。它是如何工作的。。。有点困惑that@Umair,我放置了
,这样,如果有没有符号的数字,您仍然可以匹配。它基本上使前面的事情成为可选的。换句话说-
xy?z
将匹配
xyz
xz
。感谢您的努力,但这是一个非常冗长且缓慢的解决方案:(就我个人而言,我经常需要处理少量数据,这些数据从来不会遵循相同的规则两次,因此多功能和冗长的代码正是我的拿手好戏,很高兴您得到了您想要的答案,并很高兴提供了一个替代方案。:)感谢您的努力,但这是一个非常冗长而缓慢的解决方案:(就我个人而言,我经常需要处理少量数据,这些数据从来不会遵循相同的规则两次,因此多功能和冗长的代码正是我的拿手好戏,很高兴您得到了您想要的答案,并很高兴提供了另一种选择。)