Python 匹配括号内的数字正则表达式
我试图提取括号内的所有数字,如下所示:Python 匹配括号内的数字正则表达式,python,regex,Python,Regex,我试图提取括号内的所有数字,如下所示: [1] [3-13] [15] 1 2 [] 我打算选择上面列表中的前三个。我要抢 1 3-13 15 我正在尝试以下正则表达式:\[[\d*-\d*]\] 我正在测试中的正则表达式,但我得到一个称为“坏字符范围”的错误。我做错了什么?请帮忙。我不熟悉regex您不需要字符类[],而是需要分组操作(): 分解如下: Outer()正在捕获paren以获取您想要的内容 \d+匹配前半个数字 内部(?:)是
[1]
[3-13]
[15]
1
2
[]
我打算选择上面列表中的前三个。我要抢
1
3-13
15
我正在尝试以下正则表达式:\[[\d*-\d*]\]
我正在测试中的正则表达式,但我得到一个称为“坏字符范围”的错误。我做错了什么?请帮忙。我不熟悉regex您不需要字符类
[]
,而是需要分组操作()
:
分解如下:
- Outer()正在捕获paren以获取您想要的内容
匹配前半个数字\d+
- 内部
是非捕获父级(?:)
匹配破折号,然后匹配数字的后半部分-\d+
- Final
使后半部分(内部组)成为可选的?
re.finditer
:
>>> print re.findall("\[(\d|\d[-]?\d+?)\]", "[1] [3-13] [15] 1 2 []")
['1', '3-13', '15']
编辑:添加正确答案我会尝试使用简单的正则表达式作为-
(?<=\[)(([0-9]-*[0-9]*))(?=\])
或者尝试执行此操作
\[[\d-]*\]
您可能需要跳出破折号。看看这个答案@mnciitbhu:值得注意的是,你的正则表达式最终会比你预期的匹配更多(例如,[-3-3-3]
或[]
)@Ekoji,那么你想从你的输入中匹配什么呢?@nneonno但它会匹配问题中的前三个,就像问题中一样。
(?<=\[)(([0-9]-*[0-9]*))(?=\])
import re
s="""[1]
[3-13]
[15]
1
2
[3-3-3]
[-3-3-3]
[3-3-3-]
3
[]"""
data = re.findall(r'(?<=\[)(([0-9]-*[0-9]*))(?=\])',s)
print [i[0] for i in data]
['1', '3-13', '15']