Python:如何使用正则表达式仅选择括号内的某些整数

Python: how to choose only certain integers within brackets using regex

我在编写一个在方括号中搜索整数的函数时被卡住了,该函数应该从输入字符串中找到括号中的所有整数,同时考虑到一个额外的限制:数字和括号之间可以有空格,但除了构成整数的字符外没有其他字符。

到目前为止,我编写了下面的代码,但它不适用于最后一次带有 +-43 的测试,它不应该算作一个整数。你能帮我解决这个问题吗?

谢谢!

import re

def integers_in_brackets(s):
    l = list(int(s) for s in re.findall(r'\[\s*\+?(-?\d+)\s*\]', s))
    print(l)
    return list(l)

测试:

integers_in_brackets("  afd [asd] [12 ] [a34]  [ -43 ]tt [+12]xxx")
integers_in_brackets("afd [asd] [12 ] [a34]  [         -43 ]tt [+12]xxx!")
integers_in_brackets("afd [128+] [47 ] [a34]  [ +-43 ]tt [+12]xxx!")

您的正则表达式完全按照字面意思表示可选加号后跟可选减号。如果这不是您想要的,也许您想要 加号或减号?

r'\[\s*([-+]?\d+)\s*\]'

如果你想要一个而不是两个,但捕获一个减号而不是一个加号,可以添加一个前瞻性的说“可选加号如果不是紧接着一个减号”:

r'\[\s*(?:\+(?!-))?(-?\d+)\s*\]'