首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅将正则表达式应用于短语的第一个单词(用空格定义)

仅将正则表达式应用于短语的第一个单词(用空格定义)
EN

Stack Overflow用户
提问于 2019-04-01 08:48:24
回答 1查看 115关注 0票数 -2

我使用这个正则表达式来分隔单词的字母和数字(和符号):(?<=[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

感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-01 08:56:34

我不确定你的问题陈述(参见上面的评论),但是下面的代码重现了你的预期输出并使用了str_replace_all

代码语言:javascript
复制
ss <- "CALLE15 CRA22"
library(stringr)
str_replace_all(ss, "^([A-Za-z]+)(\\d+)(\\s.+)$", "\\1 \\2\\3")
#[1] "CALLE 15 CRA22"

更新

从上面的注释中重现示例字符串的输出

代码语言:javascript
复制
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"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55446833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档