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

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

ただいまの
回答率

90.84%

  • 正規表現

    706questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 154

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

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

  1. 「"」で括られた文字列にマッチ
  2. 1. でマッチした文字列から「/」を全削除
'use strict';
'"abc//def//ghi//jk"'.replace(/"[^"]+"/g, function (string) {
  return string.replace(/\/+/g, '');
});  // "abcdefghijk"

Re: uematsu-satoshi さん

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/19 05:01

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

    キャンセル

  • 2017/12/19 08:38 編集

    専門外ですが、C#にも同じ機能があるように読めます。
    https://msdn.microsoft.com/ja-jp/library/ht1sxswy.aspx
    ただ、伝えかったのはそういうことではなくて、アルゴリズムの方です。
    アルゴリズムは言語を問わずに利用できるものであり、より良いアルゴリズムを選択できる自由があります。
    replaceにコールバック機能がなくとも、「マッチした文字列」と「マッチしなかった文字列」に分解して、同じ動作が実現できれば良いのです。
    純粋な正規表現だけの質問、とは「特定の言語機能に依存しない質問」だと思います。

    ベストアンサーに選ばれたコードは "abc"--//--"def" に誤爆してしまう("の外側も置換する)のではないか、と不安です。
    文字列全体を何度も置換する関係で効率も良くないですね。

    キャンセル

  • 2017/12/19 20:11

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

    キャンセル

checkベストアンサー

+1

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

追記

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/18 22:02

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

    よろしくお願いいたします。

    キャンセル

  • 2017/12/19 05:00

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

    キャンセル

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • 正規表現

    706questions

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