1

同様の質問を見つけて、自分で解決策を策定しようとしました。しかし、私はあまり満足していないので、ここで質問することにしました。

目的: andを使用して、文字列の最初と最後に現れるいくつかの式 ( "c(\" , and \"a\" ) を削除したいと思います。regular expressionsgsub

#test strings 1 and 2
string1<- "c(\"can't remember the last time\" \"\\a\")"
string2<- "c(\"can't remember the last time\" \"a\")"

#Attempted solution for string1
string1<- gsub("^.\\(","",string1)
string1<- gsub("\\\\.","",string1)

#Result
string1
> "\"can't remember the last time\" \"\")"

質問 1:末尾のバックスラッシュの問題に遭遇することなく、残りのバックスラッシュを削除するにはどうすればよいですか? [[:punct:]]他の句読点も削除されるため、使用できません。

#Attempted solution for string2
string2<- gsub("^.\\(","",string2)
string2<- gsub(".\\{1}","",string2)

#Result
string2
> "\"can't remember the last time\" \"a\")"

質問 2: 'a\' 式と残りのバックスラッシュを削除するにはどうすればよいですか?

PS。文字列は、Java を使用して Word 文書の表からテキスト ファイルにデータをエクスポートし、そのテキスト ファイルを にインポートした結果として取得されましたRregular expressionsしかし、データをエクスポートした Java プログラムの問題を見つけるのではなく、 を使用してこの混乱を解消する方法を知りたいだけです。

ありがとう。

編集: 質問を明確にしていないことをお詫びします。これは、最後の文を次のようにしたい方法です。

"can't remember the last time"

2回目の編集

奇妙な文字列の話: 上記の文字列は、tmパッケージを使用して構築したコーパスからDirSourceコマンドを使用して選択したものです。元のテキストは表形式で MS Word に保存されました。Java を使用してエクスポートし、文字列ごとにテキスト ファイルを作成し、それらを R にインポートしました。

structure(c("Can't remember the last time", 
"\a"), Author = character(0), DateTimeStamp = structure(list(
    sec = 40.6046140193939, min = 56L, hour = 13L, mday = 29L, 
    mon = 5L, year = 113L, wday = 6L, yday = 179L, isdst = 0L), .Names = c("sec", 
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst"
), class = c("POSIXlt", "POSIXt"), tzone = "GMT"), Description = character(0), Heading = character(0), ID = "comment1.txt", Language = "english", LocalMetaData = list(), Origin = character(0), class = c("PlainTextDocument", 
"TextDocument", "character")) 
"\a"), Author = character(0), DateTimeStamp = structure(list(
    sec = 40.7186260223389, min = 56L, hour = 13L, mday = 29L, 
    mon = 5L, year = 113L, wday = 6L, yday = 179L, isdst = 0L), .Names = c("sec", 
"min", "hour", "mday", "mon", "year", "wday", "yday", "isdst"
), class = c("POSIXlt", "POSIXt"), tzone = "GMT"), Description = character(0), Heading = character(0), ID = "comment99.txt", Language = "english", LocalMetaData = list(), Origin = character(0), class = c("PlainTextDocument", 
"TextDocument", "character"))

上記のコードで「c(」と「\a」を確認できます。

4

2 に答える 2

3

最初と最後の 2 つの部分文字列がすべての文字列に対して固定されている場合、正規表現はまったく必要ありません。使用するだけsubstrです:

substr(string2, 4, nchar(string2) - 6)

末尾の部分文字列が可変で、バックスラッシュ、二重引用符、および のみを含めることができる場合a、正規表現は次のようになります。

"[\\\\ \"a]*)$"

したがってsub、次のように使用できます。

sub("[\\\\ \"a]*)$", "", substr(string1, 4, nchar(string1)))
于 2013-06-29T14:53:56.907 に答える
2

@Mark Millerが指摘しているように、あなたの質問はあまり明確ではありません。しかし、私はそれを推測します

library( stringr )
str_replace_all( string1, '\\"', "" )

最初の問題を解決し、次に

string2 <- str_replace_all( string2, '\\"a', "" )
str_replace_all( string2, '\\"', "" )
str_replace( str2, ')', "" )

二番目。

于 2013-06-29T14:38:05.693 に答える