如何避免正则表达式匹配“Revert”Revert

2024-04-29 15:13:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,它同时匹配第1行和第2行,我只想匹配第2行而不想匹配第1行,有人能提供指导吗

import re   

line1 = '''Revert "Revert <change://problem/47614601> [tech feature][V3 Driver] Last data path activity timestamp update is required for feature""'''
line2 = '''Revert <change://problem/47614601> [tech feature][V3 Driver] Last data path activity timestamp update is required for feature"'''

if re.findall(".*?(?:Revert|revert)\s*\S*(?:change:\/\/problem\/)(\d{8})", line2):
    match = re.findall(".*?(?:Revert|revert)\s*\S*(?:change:\/\/problem\/)(\d{8})", line2)
    print "Revert radar match%s"%match
    revert_radar = True

print revert_radar

Tags: pathredatadriverv3activitychangetech
2条回答

像这样的事情应该做你想做的:

>>> regex = "(?!:(?:R|r)evert.*)(?:Revert|revert)\s*\S*(?:change:\/\/problem\/)(\d{8})"
>>> re.match(regex, line1) is None
True
>>> re.match(regex, line2).groups()
('47614601',)

反面看后面:单词不由sameword空格双引号进行

r'''(?<![Rr]evert ")[Rr]evert\s<change:[/][/]problem[/]\d{8}.*"'''

消极展望:您不希望后面跟一个双引号的模式

r'''[Rr]evert\s<change:[/][/]problem[/]\d{8}.*?\w"(?!")'''
  • 如果不需要的行紧跟在想要的行之前,并且没有中间的换行符,则这不起作用
  • 如果不需要的行跟在想要的行后面,它就可以工作

如果查看单独的行,请查看字符串开头的模式—这是三行中工作最少的一行,对于regex引擎来说效率最高

r'''^[Rr]evert\s<change:[/][/]problem[/]\d{8}.*$'''

如果要搜索的行嵌入在长字符串中,但在该行之前有一个换行符,则可以使用前面的模式和多行标志

相关问题 更多 >