将数字与 R 中的文本分开

Separate numbers from text in R

我有一些文字:

text="blablabla 400ft blablabla"

我想得到:

"blablabla 400 ft blablabla"

命令:

unlist(strsplit(text,split="[^0-9]+"))
gsub("[^0-9]+", " ", text, fixed = FALSE)

只有 return 400。

我想对 gsub 说:将您在文本中找到的每个数字替换为相同的数字加上开头和结尾的空格。我该怎么做?

尝试

 gsub('([0-9]+)([^0-9]+)', '\1 \2', text)
 #[1] "blablabla 400 ft blablabla"

也适用于多个实例

 text1 <- paste(text, text)
 gsub('([0-9]+)([^0-9]+)', '\1 \2', text1)
 #[1] "blablabla 400 ft blablabla blablabla 400 ft blablabla"

I'd like to say to gsub: replace every number you find in the text by the same number plus a whitespace at the beginning and at the end

gsub("([0-9]+)", " \1 ", text)

如果在某些情况下您想要将数字与 'ft' 分开,您也可以使用环视,而不是其他情况:

text="blablabla 400ft blablabla 400notft"

gsub('(?<=\d)(?=ft)', ' ', text, perl = TRUE)

# [1] "blablabla 400 ft blablabla 400notft"

gsub('([0-9]+)([^0-9]+)', '\1 \2', text) 相反,无论接下来发生什么都会分开:

gsub('([0-9]+)([^0-9]+)', '\1 \2', text)

# [1] "blablabla 400 ft blablabla 400 notft"

您还可以使用其他条件:

text="blablabla 400ft blablabla 400notft blablabla 400in"

gsub('(?<=\d)(?=ft|in)', ' ', text, perl = TRUE)
# [1] "blablabla 400 ft blablabla 400notft blablabla 400 in"

或者说您需要在保留上述规则的同时在字母和数字之间添加空格:

text2 <- 'blblabla 400ft blablaba400ft 400 blabla 400notft blah400notft'
gsub('(?<=[A-Za-z])(?=\d+)|(?<=\d)(?=ft|in)', ' ', text2, perl = TRUE)

# [1] "blblabla 400 ft blablaba 400 ft 400 blabla 400notft blah 400notft"