首页 > 解决方案 > Python正则表达式:使用findall仅从括号中提取整数的问题

问题描述

我正在尝试在 Python 中自学正则表达式,并且正在尝试使用它。我找到了练习正则表达式的练习,我现在面临一些困难。

练习是从字符串中查找并返回括号内的整数。该函数也应该在括号内返回这些值。数字和括号之间可以有空格,但除了构成整数的字符外,不能有其他字符(数字前允许使用-或+,并且-应该保留在返回的列表中)。

我几乎解决了这个问题,但我似乎无法找到解决小错误的方法。

我的代码返回[47, -43, 12]. 它应该返回[47, 12]

因此,我的正则表达式语句应该忽略前面有 + 和 - 的数字,但我无法让它工作。因此,它应该包括负数,但不能包括前面有多个 + 或 - 的数字。

这是我的代码。

import re
def integers_in_brackets(sample):
    t = re.findall(r"\[\s*\+?(-?\d+)\s*\]", sample)
    t = list(map(int, t))
    return t

def main():
    print(integers_in_brackets("afd [128+] [47 ] [a34]  [ +-43 ]tt [+12]xxx!"))
    #this test below works
    #print(integers_in_brackets("  afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx"))

if __name__ == "__main__":
    main()

标签: pythonregex

解决方案


推荐阅读