如何在Python中复杂正则表达式的开头匹配字符?

时间:2017-08-08 18:25:19

标签: python regex string pcre

我有一个正则表达式(请参阅this question),用于匹配文本文件中的C函数定义。特别是,我正在处理一些f () { eval "$(printf '%q ' "$@")" } 输出。

git diff

f = open(input_file) diff_txt = ''.join(f.readlines()) f.close re_flags = re.VERBOSE | re.MULTILINE pattern = re.compile(r""" (^[^-+]) # Problematic line: Want to ensure we do not match lines with +/- (?<=[\s:~]) (\w+) \s* \(([\w\s,<>\[\].=&':/*]*?)\) \s* (const)? \s* (?={) """, re_flags) 是以常规方式生成的一些原始input file输出:

git diff

我的正则表达式字符串中的第一行git diff <commit-sha-1> <commit-sha-2> > tmp.diff 存在问题。如果没有这一行,正则表达式将成功匹配(^[^-+])中的所有C / C ++函数,但是没有匹配。我需要这一行,因为我不想排除在两个存储库修订版之间添加或删除的函数,添加和删除的行标识为

input_file

我已经阅读了文档,但我似乎无法找到错误的位置,我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

- 和+是正则表达式中的特殊字符。尝试用斜杠转义它们 - [^ \ - \ +]

答案 1 :(得分:0)

请参阅this question

只需更改有问题的行

即可
(^[^-+])

^(?!\+|\-).*

由于我们正在使用否定前瞻运算符?!,因此我们必须确保在行末包含.*,否则不会匹配任何内容。