質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

1110閲覧

正規表現:「"abc//def//ghi//jk"」を「"abcdefghijk"」にしたい

Satoshi71

総合スコア25

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2017/12/18 11:53

先日以下の質問をした者です。
https://teratail.com/questions/105223

また躓きました。
「"abc//def//ghi//jk"」を「"abcdefghijk"」にしたいのですが、
「"abc//def//ghi//jk"」を「"abcdef//ghi//jk"」まではできるのですが、すべての//を削除できません。
text = Regex.Replace(text, "(".+?)//(.+?")", "$1$2");
だと1つ目の//のみ削除となってしまいます。
複数の//を削除する方法が分かりましたらご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

タグでは「正規表現」とだけありますので、言語を問わない解決法をお望みと解釈します。
正規表現で2回マッチさせれば、期待通りに動作します。

  1. 「"」で括られた文字列にマッチ
    1. でマッチした文字列から「/」を全削除

JavaScript

1'use strict'; 2'"abc//def//ghi//jk"'.replace(/"[^"]+"/g, function (string) { 3 return string.replace(//+/g, ''); 4}); // "abcdefghijk"

Re: uematsu-satoshi さん

投稿2017/12/18 14:21

think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satoshi71

2017/12/18 20:01

javascriptだと関数が埋め込めますね。こちらもありがとうございました。
think49

2017/12/18 23:38 編集

専門外ですが、C#にも同じ機能があるように読めます。 https://msdn.microsoft.com/ja-jp/library/ht1sxswy.aspx ただ、伝えかったのはそういうことではなくて、アルゴリズムの方です。 アルゴリズムは言語を問わずに利用できるものであり、より良いアルゴリズムを選択できる自由があります。 replaceにコールバック機能がなくとも、「マッチした文字列」と「マッチしなかった文字列」に分解して、同じ動作が実現できれば良いのです。 純粋な正規表現だけの質問、とは「特定の言語機能に依存しない質問」だと思います。 ベストアンサーに選ばれたコードは "abc"--//--"def" に誤爆してしまう("の外側も置換する)のではないか、と不安です。 文字列全体を何度も置換する関係で効率も良くないですね。
Satoshi71

2017/12/19 11:11

ありがとうございます。 今まさに最後にご指摘いただいた問題に直面しました。 > "abc"--//--"def" に誤爆 ただ、ご教授いただいたループで回して何とかならないかなって思っています。 textをIndexOFで分解して、"を1個おきに処理するみたいな。(あるいはtextを"で配列化して要素を1個おきに処理するとか) 速度上に問題が出そうですが、ちょっとやってみます。
guest

0

ベストアンサー

置換はプログラミング言語によって方法が異なりますので、言語を明示する必要があります。
先の質問を見ると、C#ですかね。
text = text.Replace("//","");

#追記
なるほど、読み取れてませんでした。
テストしてませんがこんな感じで。

C#

1while(true){ 2 work = Regex.Replace(text, "(\".+?)//(.+?\")", "$1$2"); 3 if(work == text) { 4 break; 5 } 6 text = work; 7}

投稿2017/12/18 12:21

編集2017/12/18 13:20
otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Satoshi71

2017/12/18 13:02

すみません、おっしゃる通りC#です。 また、1つ言い忘れましたが、"と"の間に挟まれている//をすべて消したいというのが趣旨です。 text = text.Replace("//",""); だと、たしかにすべて消すことができますが、text内すべての//が消えてしまいます。 "と"の間に挟まれている//をすべて消したい場合はどのようにすればよろしいでしょうか。 先に示した text = Regex.Replace(text, "(\".+?)//(.+?\")", "$1$2"); だと、"と"の間に挟まれている//を検知してくれますが、あくまで最初の1つだけで、複数の//を消してくれません。 よろしくお願いいたします。
Satoshi71

2017/12/18 20:00

ありがとうございました!できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問