我试图提取括号内的所有数字,如下所示:
[1]
[3-13]
[15]
1
2
[]
我打算在上面的列表中选择 FIRST THREE 。我想抓住
1
3-13
15
我正在尝试以下正则表达式:\[[\d*-\d*]\]
我正在测试Link中的正则表达式,但我收到的错误称为"字符范围错误"。我究竟做错了什么?请帮忙。我是regex的新手
答案 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']
答案 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+)?)\]
打破这个局面:
\d+
匹配数字的前半部分(?:)
是非捕获父母-\d+
匹配破折号,然后匹配数字的后半部分?
使后半部分(内部组)可选