这似乎应该很容易,但我无法弄清楚正则表达式匹配的哪种排列将导致在第一个数字后提取整个字符串(如果是字符串)。我可以在第一个数字之前提取字符串,如下所示:
gsub( "\\d.*$", "", "DitchMe5KeepMe" )
知道如何编写正则表达式模式,以便保留第一个数字后的字符串吗?
答案 0 :(得分:4)
我可以看到你想删除所有内容,直到第一个数字,所以你可以使用这个正则表达式并用空字符串替换它:
^.*?\d
我使用.*?
使模式不合适,所以如果你有DitchMe5Keep8Me
它会匹配DitchMe5
,如果你使用像.*\d
这样的贪婪模式它会匹配{ {1}}
<强> Regex 101 Demo 强>
<强> R Fiddle Demo 强>
答案 1 :(得分:4)
我不依赖于懒字点匹配,而是依赖\D
非数字字符类并使用sub
进行一次替换:
sub( "^\\D*\\d", "", "DitchMe5KeepMe" )
在这里,
^
- 匹配字符串的开头\D*
- 匹配零个或多个非数字\d
- 匹配数字注意:要删除第一个号码,请在最后+
之后添加\d
以匹配一个或多个数字。
请参阅IDEONE demo。
答案 2 :(得分:0)
您还可以使用str_extract
中的stringr
:
library(stringr)
str_extract("DitchMe5KeepMe", "(?<=\\d).*$")
[1] "KeepMe"
将在第一个数字后提取所有内容。
str_extract("DitchMe5KeepMe6keepme", "(?<=\\d).*$")
[1] "KeepMe6keepme"