角括弧内の空白をどのように整えることができますか?この特定のケースでR:角括弧内の空白を取り除く
x <- c("the li7(li7, p)b13 reaction")
、それだけでコンマとPとの間の空白を削除する必要がありますが、私は一般的な解決策を探しています。
角括弧内の空白をどのように整えることができますか?この特定のケースでR:角括弧内の空白を取り除く
x <- c("the li7(li7, p)b13 reaction")
、それだけでコンマとPとの間の空白を削除する必要がありますが、私は一般的な解決策を探しています。
cases <-c(
"(a,b)",
"(a, b)",
"(a, b)",
"a(a, b)",
"a (a, b)",
"a (a, b) a(a,b) a(a,b)"
)
gsub("[[:space:]](?=[^()]*\\))", "", cases, perl = TRUE)
[1] "(a,b)" "(a,b)" "(a,b)"
[4] "a(a,b)" "a (a,b)" "a (a,b) a(a,b) a(a,b)"
正規表現は次のように動作します。正規表現は、スペースが見つかると右括弧を探します。途中で他のカッコが見つかった場合は、停止して移動します。それは空の文字列で置き換えられます。
さてさて、私はstringr
-packageでstr_extract()
を使用して解決策を見つけました。
gsub("\\(+.*[[:blank:]]+.*\\)+",
gsub("[[:blank:]]", "",
str_extract(x, "\\(+.*[[:blank:]]+.*\\)+")),x)
これが次に空白なし抽出部と交換するために別のGSUBを使用して、括弧内の空白文字の文字列パターンを検索するためにgsub()
を使用します。
編集:角括弧内のパターンが[[:graph:]]
ファミリでカバーされていないものである場合は、式のその部分を変更する必要があります。
[[:graph:]]
を.
に変更しました。これでほとんどすべての機能が有効になります。
これまでに多くのありがとう!私は問題を指定する必要があります:文字列内に複数のかっこが可能です。 'x < - c(" c13(d、a)b11とc13(d、t)c12の反応 ")'のように残念なことに、この場合、抽出して置き換えるトリックは機能しません。私たちは再び先頭に立っています。 – hyco
'gsub'を適切な正規表現で使用します。 – Roland
...しようとしました... – hyco
'x < - gsub("、p "、" p "、x、fixed = TRUE)' – LAP