2014-09-27 143 views
0

我试图让第一对数字从 “ _135624.jpg”修改正则表达式

我的代码现在:

import re 

string = "09_135624.jpg" 
pattern = r"(?P<pair>(.*))_135624.jpg" 
match = re.findall(pattern, string) 

print match 

输出:

[('09', '09')] 

为什么我在输出中有元组吗?

你能不能帮我修改我的代码得到这个:

['09'] 

或者:

'09' 

回答

1

re.findall返回不同根据捕获组中的图案的数目:

​​

根据文档:

返回所有非重叠模式的匹配在字符串,作为 字符串的列表。字符串从左到右扫描,匹配返回 找到的顺序。 如果该模式中存在一个或多个组, 会返回一个组列表;如果模式 有多个组,这将是元组列表。空结果包含在结果 中,除非它们触及另一场比赛的开始。


替代使用re.search

>>> re.search(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg") 
<_sre.SRE_Match object at 0x00000000025D0D50> 
>>> re.search(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg").group('pair') 
'09' 
>>> re.search(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg").group(1) 
'09' 

UPDATE

要逐字匹配.,你需要逃避它:\.

+0

谢谢。现在我的模式是“(?P ([0-9] [0-9])):?(。*)。jpg”,并且我使用re.search来获取所需的组。 Vks帮助我演示,你帮助回答关于re.search,所以我不知道我可以接受什么答案... – 2014-09-27 06:29:20

+0

@ValeriyG,你可以使用'\ d'而不是'[0-9]'。 – falsetru 2014-09-27 06:30:04

+0

@ValeriyG'r'(?P \ d {2})_ \ d {6} \。jpg'' – Unihedron 2014-09-27 06:31:52

1
(?P<pair>(?:.*))_135624.jpg 

尝试this.You越来越两个结果因为你正在拍摄他们twice.I已修改它只捕获一次。请参阅演示。

http://regex101.com/r/lS5tT3/62