2

我有一些文字:

text="blablabla 400ft blablabla"

我想得到:

"blablabla 400 ft blablabla"

命令:

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

只返回400。

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

4

3 回答 3

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"
于 2015-03-24T17:07:27.870 回答
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"
于 2015-03-24T17:00:36.000 回答
2

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

gsub("([0-9]+)", " \\1 ", text)
于 2015-03-24T17:02:22.350 回答