R中与文本分开的数字

Ant*_*ine 2 regex text r gsub grepl

我有一些文字:

text="blablabla 400ft blablabla"
Run Code Online (Sandbox Code Playgroud)

我想得到:

"blablabla 400 ft blablabla"
Run Code Online (Sandbox Code Playgroud)

命令:

unlist(strsplit(text,split="[^0-9]+"))
gsub("[^0-9]+", " ", text, fixed = FALSE)
Run Code Online (Sandbox Code Playgroud)

只返回400.

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

raw*_*awr 5

如果您想要将数字与'ft'分开,也可以使用环视,比如说,而不是:

text="blablabla 400ft blablabla 400notft"

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

# [1] "blablabla 400 ft blablabla 400notft"
Run Code Online (Sandbox Code Playgroud)

相反,gsub('([0-9]+)([^0-9]+)', '\\1 \\2', text)无论下一步是什么,它都会分开:

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

# [1] "blablabla 400 ft blablabla 400 notft"
Run Code Online (Sandbox Code Playgroud)

你还可以使用其他条件:

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

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

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

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"
Run Code Online (Sandbox Code Playgroud)