atom で non-greedy な正規表現を使う(自分用メモ)

■短い答え: ?をうまく使え。
古い論文をOCRで処理している。するとOCRのミスで
“apple’
というようなものが出てきた。これが意図通りなら問題ないが本来は
“apple”
となって欲しい。こういう例が随所にあるので一括して処理するために正規表現を使おうと思った。

■最初に
"(.+)'
を試したが、正規表現がgreedy、つまり、この表現にマッチする最大長の文字列を探してしまうため、得られたテキストデータが「一段落につき改行一つ」だったりすると大変困る。そこで、non-greedy なマッチをさせる ? をつかって
"([^"]+?)'
のようにした。ここで[^"]を使っているのは
“I have a pen,” he said. Soon after that, he stook the pen to the apple, and said “apple-pen’.
みたいな文章が全文選択されるのを防ぎたいから。

■non-greedy なオプションは他の正規表現エンジンでも使えることが増えてきてる気がするけど、atom 以外でどうなってるかは知らない。