2016-08-29 9 views
2

角括弧を削除しようとしていますが、角かっこはスペースを入れないでください。角かっこの間にスペースを入れないでください。

  • マッチこれらのブラケットと、それらを削除します:たとえば[]
  • は、これらのブラケットに合わせて、それらを削除しないでください。[]

注意私を助ける:私はちょうどマッチさせたいです大括弧ではなく内容である。

私は先を先に使う必要があると思います。 \\[(?!=)。しかし、これは次の文字だけを見ているのに対し、角括弧の間のすべての文字は空白ではないことを確認したい。この状況で何をすべきか?

+1

'注:私はちょうどブラケットを一致させたい、いないなり何content'あなたはそれをすることができると思いますか? 1つのマッチでは、何かにマッチすることができず、次にスキップして別のものとマッチすることができます。正規表現のマッチングは、左から右への連続的な処理です。あなたは最初の[[空白文字以外の文字を次に見て先に見てください]を見つけることはできますが、下流の置換はまったくできません]。そして実際には、次の試合ではマッチポジションが進まず、マッチした直後にスタートします。 – sln

答えて

3

stringrの新バージョンがあなたに役立つかもしれませんが、それはregexのテスト用の素敵なウィジェットを持っています。キャプチャグループとして[]と、その後

stringr::str_view_all(c("[please]", "[help me]"), "(\\[)\\S*(\\])") 

試合[、非空白文字の後、任意の数、]、。私はあなたがそれらで何をしたいのか分かりません。

更新:ブラケットを削除するには、実際に何が入っているのかを把握してから置き換えてください。

stringr::str_replace_all(c("[please]", "[help me]"), "\\[(\\S*)\\]", "\\1") 
#> [1] "please" "[help me]" 

(括弧の間の任意のすべての非空白文字をキャプチャし、見つかった場所をキャプチャするために、文字列全体を置き換える)

+0

私は括弧のみに一致させようとしていました。それは可能ですか? – Heisenberg

+0

あなたがなぜそうしようとしているのかを示唆すれば、もっと提案してくれるかもしれません。それらを置き換える予定ですか?もしそうなら、それらは私の答えで捕捉され、 '\ 1'と' \ 2'で置き換えることができます。例えば'(\\ [)\\ S *(\\))]、' \\ 1 \\ 2 ') 'の文字列:: str_replace_all(c(" [please] "、" [help me] '[please]'から '[]'だけになります。 –

+0

私は括弧を削除する予定です - 私は主な質問で私の意図を詳述しました。不器用で申し訳ありません。 – Heisenberg

関連する問題