10

私は次のようなコードを持っています(私はここでそれを手に入れました):

m<- c("Hello! #London is gr8. I really likewhatishappening here! The alcomb of Mount Everest is excellent! the aforementioned place is amazing! #Wow")

x<- gsub("\\<[a-z]\\{4,10\\}\\>","",m)
x

私はそれをする他の方法を試しました

m<- c("Hello! #London is gr8. I really likewhatishappening here! The alcomb of Mount Everest is excellent! the aforementioned place is amazing! #Wow")

x<- gsub("[^(\\b.{4,10}\\b)]","",m)
x

長さが4未満または10を超える単語を削除する必要があります。どこが間違っているのですか?

4

6 に答える 6

12
  gsub("\\b[a-zA-Z0-9]{4,10}\\b", "", m) 
 "! # is gr8. I  likewhatishappening ! The  of   is ! the aforementioned  is ! #Wow"

正規表現の用語を説明しましょう:

  1. \bは「単語境界」と呼ばれる位置で一致します。この一致は長さがゼロです。
  2. [a-zA-Z0-9]:英数字
  3. {4,10}:{最小、最大}

これの否定を取得したい場合は、()の間に置き、//1を取ります。

gsub("([\\b[a-zA-Z0-9]{4,10}\\b])", "//1", m) 

「こんにちは!#ロンドンはgr8です。ここで何が起こっているのか本当に好きです!エベレストのアルコムは素晴らしいです!前述の場所は素晴らしいです!#Wow」

2つのregexprに4文字の単語が存在するのを見るのはおかしいです。

于 2012-12-10T09:11:12.020 に答える
1
# starting string
m <- c("Hello! #London is gr8. I really likewhatishappening here! The alcomb of Mount Everest is excellent! the aforementioned place is amazing! #Wow")

# remove punctuation (optional)
v <- gsub("[[:punct:]]", " ", m)

# split into distinct words
w <- strsplit( v , " " )

# calculate the length of each word
x <- nchar( w[[1]] )

# keep only words with length 4, 5, 6, 7, 8, 9, or 10
y <- w[[1]][ x %in% 4:10 ]

# string 'em back together
z <- paste( unlist( y ), collapse = " " )

# voila
z
于 2012-12-10T09:02:05.677 に答える
1
gsub(" [^ ]{1,3} | [^ ]{11,} "," ",m)
[1] "Hello! #London gr8. really here! alcomb Mount Everest excellent! aforementioned
     place amazing! #Wow"
于 2012-12-10T09:08:14.947 に答える
1

これはあなたが始めるかもしれません:

m <- c("Hello! #London is gr8. I really likewhatishappening here! The alcomb of Mount Everest is excellent! the aforementioned place is amazing! #Wow")
y <- gsub("\\b[a-zA-Z0-9]{1,3}\\b", "", m) # replace words shorter than 4
y <- gsub("\\b[a-zA-Z0-9]{10,}\\b", "", y) # replace words longer than 10
y <- gsub("\\s+\\.\\s+ ", ". ", y) # replace stray dots, eg "Foo  .  Bar" -> "Foo. Bar"
y <- gsub("\\s+", " ", y) # replace multiple spaces with one space
y <- gsub("#\\b+", "", y) # remove leftover hash characters from hashtags
y <- gsub("^\\s+|\\s+$", "", y) # remove leading and trailing whitespaces
y
# [1] "Hello! London. really here! alcomb Mount Everest excellent! place amazing!"
于 2012-12-10T09:09:24.997 に答える
1

Alaxender&agstudyからの回答から派生:

x<- gsub("\\b[a-zA-Z0-9]{1,3}\\b|\\b[a-zA-Z0-9]{10,}\\b", "", m)

今働いています!

トン、みんなありがとう!

于 2012-12-10T09:56:22.047 に答える
0

私はRに精通しておらず、正規表現パターンでどのクラスまたはその他の機能をサポートしているかわかりません。それらがなければ、パターンは次のようになります

[^A-z0-9]([A-z0-9]{1,3}|[A-z0-9]{11,})[^A-z0-9]
于 2012-12-10T08:40:51.760 に答える