【问题标题】:Characters before/after a symbol符号之前/之后的字符
【发布时间】:2017-12-04 09:49:31
【问题描述】:

我在 R 中有以下字符串:“xxx, yyy.zzz” 我只想得到 yyy 部分,它们在“,”和“。”之间

我不想使用正则表达式。

我搜索了半天,在R中发现了很多字符串函数,但没有一个处理“在字符之前/之后剪切”函数。

有吗?

【问题讨论】:

  • stringr 是用于此类操作的不错的包。试试stringr::word(x, 2, sep = ',\\s*|\\.')

标签: r string substring


【解决方案1】:

我们可以使用gsub 匹配零个或多个不是, ([^,]*) 的字符,从字符串的开头 (^) 后跟一个 , 后跟零个或多个空格(\\s*) 或 (!) 一个点 (\\. - 它是一个元字符,表示任何字符,因此它被转义) 后跟其他字符 (.*) 直到字符串结尾 ($)并将其替换为空白 ("")

 gsub("^[^,]*,\\s*|\\..*$", "", str1)
 #[1] "yyy"

如果我们不需要regex,那么strsplit 字符串由, 后跟零个或多个空格或. 并在将list 输出转换为vector 后选择第二个条目([[1]])

strsplit(str1, ",\\s*|\\.")[[1]][2]
#[1] "yyy"

数据

str1 <-  "xxx, yyy. zzz" 

【讨论】:

  • @Mark2Bra 如果您正在寻找非正则表达式的答案,[,.] 也是正则表达式
  • 有没有无正则表达式的解决方案?在为 strsplit 键入帮助时,在 split 部分中,只提到了正则表达式。 . .
  • @Mark2Bra 如果您知道位置,则可以使用substr。否则,这里需要正则表达式
【解决方案2】:

这可能就足够了:

unlist(strsplit("xxx, yyy. zzz","[,.]"))[2] # get yyy with space, or:
gsub(" ","",unlist(strsplit("xxx, yyy. zzz","[,.]")))[2] # remove space

【讨论】:

  • 这就是我要找的! "[,.]" 是否认为是字符向量?我之前尝试过 c("," , ".") 但没有成功。
  • 方括号在此上下文中的意思是“非此即彼”或“任何字符”,即 strsplit 在一个点或逗号的位置分隔。(搜索“正则表达式正方形”括号”,如果仍然不清楚。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2021-01-28
相关资源
最近更新 更多