回答編集履歴

1

追記

2022/03/04 23:07

投稿

otn
otn

スコア84663

test CHANGED
@@ -1,4 +1,19 @@
1
1
  正しいCSV形式か、不正なCSV形式かの判断だけであれば正規表現で出来ますが、
2
2
  不正の原因である`"`の特定や削除はプログラムのロジックでないと無理だと思います。CSVのパーサーを書くみたいな。
3
3
 
4
+ # 追記
5
+ 「前に奇数個の`"`があり、後ろに`"` `,` 末尾 が続かない`"`」という条件だと出来ますね。
6
+ ```Ruby
7
+ data = [
8
+ '123, "abc", "123abc"',
9
+ '456, "def", "456"def", "aaaa"xxxx"',
10
+ '789, "ghi", "aaa,""xxxx", "789,ghi"'
11
+ ]
4
12
 
13
+ data.each do |s|
14
+ p s.gsub(/^[^"]*"[^"]*(?:"[^"]*"[^"]*)*?\K"(?!\s*(?:[",]|$))/,"")
15
+ end
16
+ ```
17
+ この条件だけで目的にかなうのかは不明。
18
+ 1行に複数個の不正`"`があっても1つ目しか置換されないので、置換が発生した場合は再度実行する必要があります。
19
+