提问人:stats_noob 提问时间:11/21/2022 最后编辑:SecretAgentManstats_noob 更新时间:11/23/2022 访问量:41
R:使用正则表达式识别空格
R: Using Regex To Recognizes Spaces
问:
我正在使用 R 编程语言。
我有一个数据框,如下所示:
id = 1:3
var= c("123 river street A1B 6L2", "124 ocean road g7u 6p2 apartment number 5", "apartment 6 k8b 7Ji" )
my_data = data.frame(id, var)
id var
1 1 123 river street A1B 6L2
2 2 124 ocean road g7u 6p2 apartment number 5
3 3 apartment 6 k8b 7Ji
我正在尝试获得以下输出 - 我想删除每行中字母数字序列之间的空格:
id var no_space spaces var_final
1 1 123 river street A1B 6L2 A1B 6L2 A1B6L2 123 river street A1B6L2
2 2 124 ocean road g7u 6p2 apartment number 5 g7u 6p2 g7u6p2 124 ocean road g7u6p2 apartment number 5
3 3 apartment 6 k8b 7Ji k8b 7Ji k8b7Ji apartment 6 k8b7Ji
我知道如何以间接的方式开始:
spaces = apply(my_data, 1, function(x) gsub('(([A-Z] ?[0-9]){3})|.', '\\1', toString(x)))
no_spaces = trimws(spaces)
但我不确定如何继续这样做。
有人可以告诉我如何进行吗?
答:
3赞
Wiktor Stribiżew
11/21/2022
#1
你可以使用
id = 1:3
var= c("123 river street A1B 6L2", "124 ocean road g7u 6p2 apartment number 5", "apartment 6 k8b 7Ji" )
my_data = data.frame(id, var)
library(stringr)
regex <- "\\b(?:\\d+[A-Za-z]|[A-Za-z]+\\d)[A-Za-z\\d]*(?:\\s+(?:\\d+[A-Za-z]|[A-Za-z]+\\d)[A-Za-z\\d]*)+\\b"
str_replace_all(my_data$var, regex, function(x) str_replace_all(x, "\\s+", ""))
## => [1] "123 river street A1B6L2"
## => [2] "124 ocean road g7u6p2 apartment number 5"
## => [3] "apartment 6 k8b7Ji"
请参阅正则表达式演示。细节:
\b
- 词边界(?:\d+[A-Za-z]|[A-Za-z]+\d)[A-Za-z\d]*
- 同时包含数字和字母的字母数字字符串(?:\s+(?:\d+[A-Za-z]|[A-Za-z]+\d)[A-Za-z\d]*)+
- 出现一次或多次\s+
- 一个或多个空格(?:\d+[A-Za-z]|[A-Za-z]+\d)[A-Za-z\d]*
- 同时包含数字和字母的字母数字字符串
\b
- 词边界。
替换参数,用于将每个匹配项替换为自身,但删除所有空格。function(x) str_replace_all(x, "\\s+", "")
stringr::str_replace_all
评论