正規表現の置換で、カンマで区切られた語句を""と改行で分ける方法
正規表現による置換についてお教えください。
Unixのコマンドで置換するときに、sed コマンドを使うと思います。
今、プログラムのソースコードの中に含まれている語句を取得するために、色々いじろうと思っています。
私が最もお聞きしたいのは、正規表現の書き方であることを、まずご理解ください。
ソースコードの中に、
string headline="語句1,語句2,・・・,語句n-1,語句n";
というように、
string headline=
で始まっていて、
その後に " "(ダブルクォーテーションの組)で囲まれた部分が1箇所あり、
その部分に、カンマ(,)で区切られた語句がいくつもあるような行があったとき、
その " "の部分を、
"語句1",
"語句2",
・・・
"語句n-1",
"語句n"
のように置換したいのです。
つまり、語句一つ一つをダブルクォーテーションで包んで、1行に語句が1つになるようにしたいのです。
厳密に言えば、stringとheadlineの間などに、タブや空白がいくつあるかわからないという問題なども考える必要があるかもしれません。
とりあえず私が考えたのは、
s/\(string headline="\)\([^,]\)+,\(";\)/\1\2",改行"\3/g
です。
s/置換前の文字列のパターン/置換後の文字列のパターン/g
となっています。
置換前のパターンで
\( \)
で囲まれている部分は、置換後のほうで、\1のように参照できます。
■■でも、私の書いたものって、語句が繰り返し出現することに対応できていないように思われます。■■
実際に、置換に改行を含めるには、正規表現をファイルの中に書いて、sedの-fオプションで読み込ませることになると思います。
string headline=" "
という形をしていないものは、たとえ、" " の中がカンマで区切られていてもそれを分けません。
お礼
ありがとうございました。11月タブに終わりに半角のスペースが入っていました。同様の別表を作成したときも10月のところで同様の症状がでていたので、10のように数字が二つ入るとエラーが出て何らかの方法が必要なのかなと思いました。今回のご指摘どおり画面に10月と11月を並べて食い入るように見ていたところ、数字と’(アポストロフィー)の間が馬鹿に離れているのに気がつき他の月とも見比べて離れていて、タブの名前を変更としたところまさしく半角入っていました。削除したところ解決しました。でも、タブを見ただけでは半角がわかりませんでした。置換しようとすると半角が入っているので置換する11月はどこにあるのかを求めていたようです。ほんと、初心者のような間違いでした。