在R中:在第一个标点之前抓取所有alnum字符

时间:2015-10-28 21:59:44

标签: regex r string grep

我有一个字符串(或NAs)的向量s,并希望在第一次出现punction(.)之前得到一个长度相同的向量。

s <- c("ABC1.2", "22A.2", NA)

我想得到一个结果:

[1] "ABC1" "22A"  NA 

1 个答案:

答案 0 :(得分:2)

您可以使用以下类似Perl的正则表达式从第一个点删除所有符号(包括换行符):

s <- c("ABC1.2", "22A.2", NA)
gsub("[.][\\s\\S]*$", "", s, perl=T)
## => [1] "ABC1" "22A"  NA  

请参阅IDEONE demo

正则表达式匹配

  • [.] - 一个文字点
  • [\\s\\S]* - 包含任何符号新行
  • $ - 字符串结束。

使用""从输入中删除所有匹配的字符串。当正则表达式引擎从左到右分析字符串时,第一个点与\\.匹配,而带有*的贪婪[\\s\\S]量词将匹配所有直到字符串结尾。< / p>

如果没有换行符,则会使用更简单的正则表达式:[.].*$

gsub("[.].*$", "", s)

请参阅another demo