首页 > 解决方案 > Python:如何使用正则表达式仅选择括号内的某些整数

问题描述

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

到目前为止,我编写了下面的代码,但它不适用于最后一个带有 +-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!")

标签: pythonregexinteger

解决方案


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

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

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

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

推荐阅读