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

Python:如何使用正则表达式仅选择括号内的某些整数,python,regex,integer,Python,Regex,Integer,我在编写一个搜索方括号中整数的函数时陷入了困境,该函数应该从输入字符串中查找括号中包含的所有整数,并考虑到一个额外的限制:数字和括号之间可以有空格,但除了构成整数的字符外,没有其他字符 到目前为止,我编写了下面的代码,但它不适用于上一个使用+-43的测试,它不应该被算作整数。你能帮我解决这个问题吗 谢谢 import re def integers_in_brackets(s): l = list(int(s) for s in re.findall(r'\[\s*\+?(-?\d+)

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

到目前为止,我编写了下面的代码,但它不适用于上一个使用+-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*\]'
如果您想要其中一个,但不是两个,但捕获了一个负号而不是加号,那么可以添加一个前瞻性语句,说“可选加号,如果不紧跟负号的话”:


\[\s*([-+]?\d+\s*]
()?
\[(?!\s*\+-)\s*\+?(?\d+\s*]
()?@WiktorStribiżew:谢谢你,它很管用!
r'\[\s*(?:\+(?!-))?(-?\d+)\s*\]'