修改正则表达式

时间:2014-09-27 06:14:03

标签: python regex python-2.7

我想从" 09 _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'

2 个答案:

答案 0 :(得分:1)

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

试试这个。你得到两个结果,因为你正在捕获它们两次。我已经修改它只捕获一次。见示。

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

答案 1 :(得分:1)

re.findall根据模式中的捕获组数量返回不同:

>>> re.findall(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg")
['09']

根据文件:

  

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


替代使用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'

<强>更新

要按字面意思匹配.,您需要将其转义:\.