使用正则表达式提取重复子字符串的特定组

时间:2015-10-22 11:36:53

标签: python regex

提供输入“inputString”,可以采用“0/1”,“0/1/2”,...(或由“/”分隔的至少两个数字的任何其他组合),我写了跟随提取数字的基于正则表达式的表达式:

match = re.search("(\d)+/*", inputString)

为了列出最后两位数字,我使用了

match.groups()[-1], match.groups()[-2]

然而,输入“0/1”时,我只得到“0”。我如何使用正则表达式的特定重复子字符串(在我的情况下是一个数字)。当然,.split('/')是另一种选择,但我对正则表达式感兴趣。

2 个答案:

答案 0 :(得分:0)

您需要使用re.findall代替re.search

re.search仅检查字符串中任何位置的单个匹配。

答案 1 :(得分:0)

使用$将搜索锚定到该行的末尾。

import re

for text in ('0', '0/1', '0/1/2', 'foo', '0/1/2/3', 'bar'):
    m = re.search(r'(\d)/(\d)$', text)
    if m:
        print(m.groups())
    else:
        print('no match for:', text)

给你:

no match for: 0
('0', '1')
('1', '2')
no match for: foo
('2', '3')
no match for: bar

但是,在一天结束时,你最有可能做得更好:

try:
    g1, g2 = text.rsplit('/', 2)
except ValueError:
    pass # do something appropriate