匹配括号内的数字regex

  • 本文关键字:数字 regex python regex
  • 更新时间 :
  • 英文 :


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

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

我打算在上面的列表中选择前三个。我想要

1
3-13
15

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

我正在测试链接中的正则表达式,但我得到了一个称为"坏字符范围"的错误。我做错了什么?请帮忙。我是regex 的新手

我会尝试简单的regex作为-

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

这个表达式可以将列表中的任何类型的数字作为值的列表,如果你想迭代,你可以使用re.finditer:

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

编辑:添加正确答案

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

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

细分:

  • Outer()正在捕获parens以获取您想要的内容
  • d+与前半位数字匹配
  • 内部(?:)是非捕获父级
  • -d+先匹配短划线,然后匹配数字的后半部分
  • 最后的?使下半场(内场小组)成为可选

最新更新