我想从" 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'
答案 0 :(得分:1)
(?P<pair>(?:.*))_135624.jpg
试试这个。你得到两个结果,因为你正在捕获它们两次。我已经修改它只捕获一次。见示。
答案 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'
<强>更新强>
要按字面意思匹配.
,您需要将其转义:\.
。