2015-12-14 74 views
0

我試圖提取所有那些括號內如下數字:匹配括號的數字的正則表達式

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

我打算選擇在上面的列表中前三。我想抓住

1 
3-13 
15 

我想下面的正則表達式:\[[\d*-\d*]\]

我在Link測試出的正則表達式,但我得到被稱爲「壞字符範圍」的錯誤。我究竟做錯了什麼?請幫忙。我是新來的正則表達式

+0

做這個'\ [[\ d - ] * \]' – mnciitbhu

+0

你可能需要逃避短劃線。看看這個答案 http://stackoverflow.com/questions/8833963/allow-dash-in-regular-expression – Abundance

+0

@mnciitbhu:值得注意的是,你的正則表達式最終會比你期望的匹配更多(例如' [-3-3-3]'或'[]') – nneonneo

回答

1

我會嘗試簡單的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 或嘗試DEMO

-1

你不想一個字符類[],而是分組操作()

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

打破下來:

  • 外()被捕獲括號來抓住你想要的東西
  • \d+匹配數字的前半部分
  • 內部(?:)的非捕獲父母
  • -\d+比賽破折號然後數字下半年
  • 最終?使得下半年(內組)可選
0

這種表達讓你任何數量的與該列表作爲值的列表,如果你想遍歷可能是你可以使用re.finditer

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

編輯:添加正確的答案

相關問題