私は、テキストファイルのCの関数定義を一致させるために使用される正規表現(this questionを参照)を持っています。特に、私はいくつかのgit diff
出力に取り組んでいます。Pythonで複雑な正規表現の先頭にある文字をどのように一致させるか?
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
私の正規表現文字列の最初の行(^[^-+])
には問題があります。この行がなければ、正規表現はinput_file
のすべてのC/C++関数に首尾よくマッチしますが、それと一致するものはありません。私は、ドキュメントを読んで、私は」することができます私は、2つのリポジトリリビジョンの間に追加または削除された機能を除外するためにwan'tので、この行を必要とし、追加および削除された行は
+ [added line]
- [removed line]
として識別されています私の誤りがどこにあるのかを見ているようですが、助けていただければ幸いです。
私は今、あなたのドキュメントにリンクすることはできませんが、それを読んだ場合、角括弧の中に置かれたときに特殊文字が特別な意味を失うことは明らかです。 。] '。しかし、 '^'が大括弧の中の最初の文字である場合、大括弧で囲まれていない文字はすべて一致する必要があります。 – UnchartedWaters