2016-03-01 23 views
5

gsubを使用して標準ダッシュと思っていたものを置き換えようとしていました。私がテストしたコードはでした:特殊文字を含むR gub

gsub("-", "ABC", "reported – estimate")

これはしかし、何もしません。ダッシュをコピーしてhttp://unicodelookup.com/#–/1に貼り付けたところ、ダッシュのようです。そのサイトはenダッシュの16進数、12進コードを提供しています。私はenダッシュを置き換えようとしていますが、運がないわけではありません。提案?

(参考になる特殊文字を識別する機能があるかどうかを教えてください)

SOのコードの書式設定によってダッシュ形式が変更されるかどうかわかりませんので、ここではダッシュ( - )を使用しています。

答えて

4

正規表現のパターンで指定するだけで、en-dashを置き換えることができます。

gsub("–", "ABC", "reported – estimate") 

あなたは、文字列内の非ASCII文字がある場合はIDEONE demo

を確認するにはを参照してください

gsub("[-–—]", "ABC", "reported – estimate — more - text") 

を持つすべてのエンハイフン、全角ダッシュと一致し使用することができます

> s = "plus ça change, plus c'est la même chose" 
> gsub("[[:ascii:]]+", "", s, perl=T) 
[1] "çê" 

this IDEONE demo

文字列が "word"文字と空白のみで構成されている場合は空の結果が得られます。ここでは "特殊文字"がいくつかあります。

+0

これは素晴らしいです。おそらく、私は "特殊文字"で正しい用語を使用していなかったでしょう。これが意味するのは、標準のUTF-8ではない文字です。例えば、ô - これらは私がreadr :: write_csv()を使ってエクスポートすると奇妙に見える文字です。あなたが与えたgsubは、 "特殊文字"として "ô"を識別するために変更することはできますか? – ZRoss

+1

すべてのascii: 'gsub(" [[:ascii:]] + "、" "、s)'にマッチする正規表現で使うことができます。これにより、結果内のすべてのUnicode文字を保持する文字列からすべてのasciiが削除されます。 –

+0

これはPCRE構造体なので、上記の正規表現パターンで 'perl = T'を使うだけです。 –

2

特殊文字の置換は、負の補数を行うことができます。

gsub('[^\\w]*', 'ABC', 'reported - estimate', perl = True)はすべての特殊文字をABCに置き換えます。 [^ \ w]は、通常の文字ではないものを示すパターンです。