0

我有以下代码,它找到所有标签“依赖”并加入它们并打印它们..现在我只想抓住最后一个依赖,打印是值..预期输出和当前输出如下所示。

Current output:-

['348523', '350167', '350169', '348522', '350166', '350168', '350169', '350170', '350428', '350435', '350439', '350446', '350449', '350450', '350459', '350462', '350463', '350466', '350472', '350475', '350810', '350811', '350812', '350870', '350871', '350875', '350876', '350882', '350883', '350884', '350885', '348521']

Expected output:-
['348521','238567']

代码:-

import re
def findexternaldep ():
    #print "Processing dependency for change %s", change
    #change=str(change)
    comments = ''' comments:
    timestamp: 2013-06-12 09:18:36 PDT
    reviewer:
      name: user L
      email: username@com.company.com
      username: username
    message: Patch Set 2:

             Depends-on: 348523 350167 350169
    timestamp: 2013-06-12 09:18:36 PDT
    reviewer:
      name: user L
      email: username@com.company.com
      username: username
    message: Patch Set 2:

             Depends-on: 348522 350166 350168 350169 350170 350428 350435 350439 350446 350449 350450 350459 350462 350463 350466 350472 350475 350810 350811 350812 350870 350871 350875 350876 350882 350883 350884 350885
  comments:
    timestamp: 2013-06-12 10:39:46 PDT
    reviewer:
      name: user L
      email: username@com.company.com
      username: username
    message: Patch Set 2:
             Depends-on: 348521 238567
    '''

    print "COMMENTS"
    print comments
    deps = ' '.join(re.findall(r'(?<=Depends-on:\s)[\d ]+(?=\n)', comments)).split()
    print "DEPS"
    print deps
    #print depgerrit
    return deps

def main ():
    findexternaldep()

if __name__ == '__main__':
    main()
4

4 回答 4

1

只需在评论中向后搜索,然后一直到行尾:

print comments.rsplit('Depends-on: ', 1)[1].split('\n', 1)[0]

或将您的正则表达式修改为:

deps = re.findall(r'(?<=Depends-on:\s)[\d ]+(?=\n)', comments)

然后获取最后一个元素:

print deps[-1]

如果你想让他们都加入:

all_deps = ' '.join(deps) # similar to before
于 2013-06-18T00:43:43.060 回答
1

使用贪心点匹配跳过直到最后一个 Depends-on 怎么样:

m=re.match(r'.*Depends-on:\s*([^\n]*)', comments, re.DOTALL)
if m: print m.group(1)

输出

348521
于 2013-06-18T01:02:15.530 回答
0

如果最新,您的意思是列表的最后一个元素,那么您可以通过以下方式获得:

deps[-1]

例如:

a = [2,4,6]
e = a[-1]
print(e)    #  Prints "6"

这似乎是您所期望的输出所寻找的。

但是,如果您正在寻找最大或最小的列表元素(当解释为整数时),您可以使用类似:

max(map(int, deps))

例如:

a = ['2','4','1','3']
e = max(map(int, a))
print(e)    #  Prints "4"
于 2013-06-18T00:38:41.103 回答
0

你的意思是你想让它返回列表中的最后一个吗?如果没有错误检查,那不就是:

deps[-1]

否则,问题是每个都在正则表达式中找到,所以它们都被包含在列表中。

于 2013-06-18T00:42:47.637 回答