2016-05-24 9 views
5

私のデータにあるいくつかの名前を修正するのにgsubを使いたいと思います。私は、 "R.J." 「A.文字の間にスペースがないようにする。例えばgsubパターンの一部のみ

x <- "A. J. Burnett" 

私は彼の最初の名前のパターンに一致するGSUBを使用して、スペースを削除する:

gsub("[A-Z]\\.\\s[A-Z]\\.", "[A-Z]\\.[A-Z]\\.", x) 

しかし、私は得る:

[1] "[A-Z].[A-Z]. Burnett" 

明らかに、[AZ]の代わりに、元の名前の実際の文字が必要です。これどうやってするの?

+4

http://stackoverflow.com/questions/29463495/how-to-replace-many-special-characters-with-something-plus-special-characters – rawr

答えて

6

(...)にパターンを囲んでキャプチャグループを使用し、\\1,\\2などのキャプチャパターンを参照してください。この例では:

x <- "A. J. Burnett" 
gsub("([A-Z])\\.\\s([A-Z])\\.", "\\1.\\2.", x) 
[1] "A.J. Burnett" 

はまた、彼らはそこに特別な意味を持っていないので、交換にあなたは、.文字をエスケープする必要はないことに注意してください。

+0

よろしくお願い致します。 – Colin

1

ルックアヘッド((?=\\w\\.))とルックバックビハインド((?<=\\b\\w\\.))を使用して、このようなスペースをターゲティングし、それらを ""で置き換えることができます。

x <- c("A. J. Burnett", "Dr. R. J. Regex") 
gsub("(?<=\\b\\w\\.) (?=\\w\\.)", "", x, perl = TRUE) 
# [1] "A.J. Burnett" "Dr. R.J. Regex" 

先読み期間(\\.)に続く単語文字(\\w)に一致する、ルックビハインドワード境界(\\b)単語文字とピリオドに一致します。

関連する問題