2016-11-14 14 views
-2

角括弧内の空白をどのように整えることができますか?この特定のケースでR:角括弧内の空白を取り除く

x <- c("the li7(li7, p)b13 reaction") 

、それだけでコンマとPとの間の空白を削除する必要がありますが、私は一般的な解決策を探しています。

+0

'gsub'を適切な正規表現で使用します。 – Roland

+0

...しようとしました... – hyco

+0

'x < - gsub("、p "、" p "、x、fixed = TRUE)' – LAP

答えて

2
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)" 

正規表現は次のように動作します。正規表現は、スペースが見つかると右括弧を探します。途中で他のカッコが見つかった場合は、停止して移動します。それは空の文字列で置き換えられます。

+0

ニース、その正規表現を分解できますか?そしてこれはregexpのR-wayで行うことができます。あなたはperlにもっと慣れていますか、あるいはperlのような正規表現を使わなければ可能ではありませんか? – LAP

+1

Nah、あなたはperlに付属している先読みが必要です。 –

+0

私はperl regexprを学ばなければならないようです。ありがとう。 – LAP

1

さてさて、私はstringr -packageでstr_extract()を使用して解決策を見つけました。

gsub("\\(+.*[[:blank:]]+.*\\)+", 
gsub("[[:blank:]]", "", 
    str_extract(x, "\\(+.*[[:blank:]]+.*\\)+")),x) 

これが次に空白なし抽出部と交換するために別のGSUBを使用して、括弧内の空白文字の文字列パターンを検索するためにgsub()を使用します。

編集:角括弧内のパターンが[[:graph:]]ファミリでカバーされていないものである場合は、式のその部分を変更する必要があります。

[[:graph:]].に変更しました。これでほとんどすべての機能が有効になります。

+0

これまでに多くのありがとう!私は問題を指定する必要があります:文字列内に複数のかっこが可能です。 'x < - c(" c13(d、a)b11とc13(d、t)c12の反応 ")'のように残念なことに、この場合、抽出して置き換えるトリックは機能しません。私たちは再び先頭に立っています。 – hyco

関連する問題