python - 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!")
解决方案
您的正则表达式字面意思是可选加号,后跟可选减号。如果这不是您想要的,也许您想要一个加号或减号?
r'\[\s*([-+]?\d+)\s*\]'
如果你想要一个但不是两个,但捕获一个减号而不是一个加号,可以添加一个前瞻来说“可选的加号,如果不是紧跟一个减号”:
r'\[\s*(?:\+(?!-))?(-?\d+)\s*\]'
推荐阅读
- android - Xamarin 构建错误:定义静态接口方法需要 --min-sdk-version >= 24
- azure - 在 Powershell 上使用服务总线队列 InputObject 参数
- python - 如何在不使用 SPARQL 的情况下使用 rdflib 模式匹配三元组
- angularjs - 如何根据按钮选择更改 uib-typeahead 数组?
- javascript - 如何使用开放层 3 或 4 在 OpenStreetMap 上制作路线?
- selenium - 是否可以忽略 Firefox 来运行该功能?
- html - ul 类不与网站标志内联
- html - 带有可展开的可滚动行的 CSS 网格
- c# - 在 Resharper 中创建后缀模板以进行本地化
- python - CTypes,从包装器中引发 python 样式的异常