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

时间:2019-02-02 03:07:41

标签: 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

2 个答案:

答案 0 :(得分:0)

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

>>> 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',)

答案 1 :(得分:0)

后面负外表:通过字sameword - 空间 - 双引号

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

反面看:不希望在其后跟双双引号

的模式
r'''[Rr]evert\s<change:[/][/]problem[/]\d{8}.*?\w"(?!")'''
  • 如果不需要的行紧接在想要的行之前,且中间没有换行符,则此操作无效。
  • 如果不需要的行紧跟通缉行,则
  • 确实有效。

如果在看各条线,看看在字符串的开始的图案 - 的三这是最工作,最有效的正则表达式引擎

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

如果您正在寻找该行的嵌入式的中长字符串,但有在该行之前,你可以使用以前的模式与多标志一个换行符。