2016-07-15 170 views
-3

我正在使用Python腳本從我們的JIRA公司實例中讀取數據。有一個值作爲字符串返回,我需要弄清楚如何從中提取一點信息。我需要的是'name = ....'我只需要這個結果中的數字。Python正則表達式提取'name = ....'

<class 'list'>: ['[email protected][id=30943,rapidViewId=10468,state=CLOSED,name=2016.2.4 - XXXXXXXXXX,startDate=2016-05-26T08:50:57.273-07:00,endDate=2016-06-08T20:59:00.000-07:00,completeDate=2016-06-09T07:34:41.899-07:00,sequence=30943]'] 

我只需要它的2016年2月4日部分。這個數字也不總是相同的。

任何想法如何與RE做到這一點?我是新來的正則表達式,並會感謝任何幫助。

+1

*「我是新來的正則表達式」* - https://docs.python.org/3/howto/regex.html – jonrsharpe

回答

0

一個簡單的正則表達式可以做到這一點:name=([0-9.]+)

正則表達式的主要部分是([0-9.]+)這會爲任何數字(0-9)或依次週期(.)(+)搜索。

現在,使用此:

import re 
pattern = re.compile('name=([0-9.]+)') 

string = '''<class 'list'>: ['[email protected][id=30943,rapidViewId=10468,state=CLOSED,name=2016.2.4 - XXXXXXXXXX,startDate=2016-05-26T08:50:57.273-07:00,endDate=2016-06-08T20:59:00.000-07:00,completeDate=2016-06-09T07:34:41.899-07:00,sequence=30943]']''' 

matches = pattern.search(string) 
# Only assign the value if a match is found 
name_value = '' if not matches else matches.group(1) 
+0

在牙醫取得我的冠冕後,我會試試。似乎很容易,但。 – ThatGuyDogboy

+0

當我在我的python文件中使用這段代碼時,它給了我一個錯誤: 'IndexError:no such group' – ThatGuyDogboy

0

使用capturing group提取版本名稱:

>>> import re 
>>> s = '[email protected][id=30943,rapidViewId=10468,state=CLOSED,name=2016.2.4 - XXXXXXXXXX,startDate=2016-05-26T08:50:57.273-07:00,endDate=2016-06-08T20:59:00.000-07:00,completeDate=2016-06-09T07:34:41.899-07:00,sequence=30943]' 
>>> re.search(r"name=([0-9.]+)", s).group(1) 
'2016.2.4' 

其中([0-9.]+)是匹配一個或多個數字或點捕獲組,括號定義捕獲組。

非正則表達式的選擇將涉及到一些splitting通過,=-

>>> l = [item.split("=") for item in s.split(",")] 
>>> next(value[1] for value in l if value[0] == "name").split(" - ")[0] 
'2016.2.4' 

這,當然,需要測試和錯誤處理。

+0

在我完成我的牙冠治療後,似乎很容易,但。 – ThatGuyDogboy

+0

這可以在shell中正常工作。但是,當我在文件中使用類似的東西時,我得到一個_no這樣的group_錯誤: – ThatGuyDogboy