匹配括号内的正则表达式

时间:2015-12-14 17:37:49

标签: python regex

我试图提取括号内的所有数字,如下所示:

    [1]
    [3-13]
    [15]
    1
    2
    []

我打算在上面的列表中选择 FIRST THREE 。我想抓住

1
3-13
15

我正在尝试以下正则表达式:\[[\d*-\d*]\]

我正在测试Link中的正则表达式,但我收到的错误称为"字符范围错误"。我究竟做错了什么?请帮忙。我是regex的新手

3 个答案:

答案 0 :(得分:1)

我会尝试简单的正则表达式 -

(?<=\[)(([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']

DEMO 或者尝试 DEMO

答案 1 :(得分:0)

This expression gets you any kind of number with in the list as a list of values, if you want to iterate over may be you can use re.finditer:

>>> print re.findall("\[(\d|\d[-]?\d+?)\]", "[1] [3-13] [15] 1 2 []")
['1', '3-13', '15']

Edit: Added right answer

答案 2 :(得分:-1)

您不需要字符类[],而是需要分组操作()

\[(\d+(?:-\d+)?)\]

打破这个局面:

  • Outer()正在捕捉parens以准确抓住你想要的东西
  • \d+匹配数字的前半部分
  • 内部(?:)是非捕获父母
  • -\d+匹配破折号,然后匹配数字的后半部分
  • 最终?使后半部分(内部组)可选