このようなテキストがあるとしましょう。
text<-c("[McCain]: We need tax policies that respect the wage earners and job creators. [Obama]: It's harder to save. It's harder to retire. [McCain]: The biggest problem with American healthcare system is that it costs too much. [Obama]: We will have a healthcare system, not a disease-care system. We have the chance to solve problems that we've been talking about... [Text on screen]: Senators McCain and Obama are talking about your healthcare and financial security. We need more than talk. [Obama]: ...year after year after year after year. [Announcer]: Call and make sure their talk turns into real solutions. AARP is responsible for the content of this advertising.")
[と]の間のすべてのテキスト(および角かっこ自体)を削除(編集:削除)したいと思います。これを行うための最良の方法は何ですか?正規表現とstingrパッケージを使用した私の微妙な試みは次のとおりです。
str_extract(text, "\\[[a-z]*\\]")
助けてくれてありがとう!
これとともに:
gsub("\\[[^\\]]*\\]", "", subject, Perl=TRUE);
正規表現の意味:
\[ # '['
[^\]]* # any character except: '\]' (0 or more
# times (matching the most amount possible))
\] # ']'
次の方法でうまくいくはずです。 ?
はレイジーマッチを強制します。これは、後続の.
の前にできるだけ少ない]
にマッチします。
gsub('\\[.*?\\]', '', text)
否定された文字クラス/ブラケット式でPCRE正規表現を使用する必要はありません。「クラシック」TRE正規表現も機能します。
subject <- "Some [string] here and [there]"
gsub("\\[[^][]*]", "", subject)
## => [1] "Some here and "
オンラインRデモ を参照してください
詳細:
\\[
-リテラル[
(リテラル[[]
として解析するには、エスケープするか、[
のような角かっこ式内で使用する必要があります)[^][]*
-[
および]
以外の0+文字に一致する否定されたブラケット式(ブラケット式の先頭の]
はリテラル]
として扱われることに注意してください)]
-リテラル]
(この文字はPCREとTREの両方の正規表現で特別ではなく、エスケープする必要はありません)。角かっこのみを他の区切り文字で置き換える場合は、置換パターンで 後方参照 を使用してキャプチャグループを使用します。
gsub("\\[([^][]*)\\]", "{\\1}", subject)
## => [1] "Some {string} here and {there}"
別のデモ を参照してください
(...)
括弧で囲まれた構造は、キャプチャグループを形成し、その内容には、後方参照\1
を使用してアクセスできます(グループはパターンの最初のグループであるため、そのIDは1に設定されます)。
別のアプローチは次のとおりです。
library(qdap)
bracketX(text, "square")
これは技術的にはあなたの質問に答えると思いますが、よりきれいなテキスト(コロンとスペースを削除)の正規表現の最後に\\:
を追加することをお勧めします。
library(stringr)
str_replace_all(text, "\\[.+?\\]", "")
#> [1] ": We need tax policies that respect the wage earners..."
対...
str_replace_all(text, "\\[.+?\\]\\: ", "")
#> [1] "We need tax policies that respect the wage earners..."
reprexパッケージ (v0.2.0)によって2018-08-16に作成されました。