我使用这个正则表达式来分隔单词的字母和数字(和符号):(?<=[a-zA-Z])(?=([[0-9]|[:punct:]]))
。我的测试字符串是:"CALLE15 CRA22"
。
我只想将这个正则表达式应用于该句子的第一个单词(该单词由空格定义)。也就是说,我只想将其应用于"CALLE15"
。
一种解决方案是将字符串(句子)拆分为单词,然后将正则表达式应用于第一个单词,但我希望在一个正则表达式中完成所有操作。另一个解决方案是使用r stringr::str_replace() (or sub())
,它只替换第一个匹配项,但出于其他原因,我需要使用stringr::str_replace_all (or gsub())
。
我需要的是在这两个函数之间插入一个空格,这样我就可以使用替换函数了。我想要的结果是"CALLE 15 CRA22"
,并且具有"CALLE15 CRA 22"
的可能性。我尝试了很多空格的位置,但什么都没有,也没有开始的^
。
https://rubular.com/r/7dxsHdOA3avTdX
感谢您的帮助!
发布于 2019-04-01 08:56:34
我不确定你的问题陈述(参见上面的评论),但是下面的代码重现了你的预期输出并使用了str_replace_all
ss <- "CALLE15 CRA22"
library(stringr)
str_replace_all(ss, "^([A-Za-z]+)(\\d+)(\\s.+)$", "\\1 \\2\\3")
#[1] "CALLE 15 CRA22"
更新
从上面的注释中重现示例字符串的输出
ss <- "CLL.6 N 5-74NORTE"
pat <- c(
"(?<=[A-Za-z])(?![A-Za-z])",
"(?<![A-Za-z])(?=[A-Za-z])",
"(?<=[0-9])(?![0-9])",
"(?<![0-9])(?=[0-9])")
library(stringr)
str_split(ss, sprintf("(%s)", paste(pat, collapse = "|"))) %>%
unlist() %>%
.[nchar(trimws(.)) > 0] %>%
paste(collapse = " ")
#[1] "CLL . 6 N 5 - 74 NORTE"
https://stackoverflow.com/questions/55446833
复制相似问题