R中与文本分开的数字

时间:2015-03-24 16:57:44

标签: regex r text gsub grepl

我有一些文字:

text="blablabla 400ft blablabla"

我想得到:

"blablabla 400 ft blablabla"

命令:

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

只返回400.

我想对gsub说:用相同的数字替换你在文本中找到的每个数字加上开头和结尾的空格。我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

如果您希望将数字与' 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"

答案 1 :(得分:4)

尝试

 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"

答案 2 :(得分:2)

  

我想对gsub说:替换你在文中找到的每个号码   相同的数字加上开头和结尾的空格

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