2016-07-15 96 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