如何删除字符串第一个数字之后的所有内容?
x <- c("Hubert 208 apt 1", "Mass Av 300, block 3")
在this question之后,我成功删除了第一个数字(包括第一个数字)之前的所有内容:
gsub( "^\\D*\\d+", "", x )
[1] " apt 1" ", block 3"
但是所需的输出看起来像这样:
[1] "Hubert 208" "Mass Av 300"
>
答案 0 :(得分:4)
在OP的当前代码中,进行较小的更改即可使其工作,即将匹配的模式作为一个组((...)
)捕获并替换为向后引用(\\1
)
sub("^(\\D*\\d+).*", "\\1", x)
#[1] "Hubert 208" "Mass Av 300"
此处,OP中的模式表示("^\\D*\\d+"
)-从字符串的开头(\\D*
)开始的零个或多个不是数字(^
)的字符,后跟一个或多个数字(\\d+
),并用括号((...)
)将其捕获为一组。
此外,我们不需要gsub
(全局替换),因为我们只需要匹配一个实例(从头开始)
答案 1 :(得分:2)
另一种替代替换的方法是获取表达式并使用匹配项。
通过从字符串^
的开头开始匹配,您的模式将一直匹配到第一个数字之后,而不是数字\D*
0+倍,然后是数字\d+
的1+倍:< / p>
^\\D*\\d+
如果在perl = TRUE中使用sub,则可以使用\K
来忘记匹配的内容。
然后您可以使用:
^\\D*\\d+\\K.*
在替换中,使用一个空字符串。
sub("^\\D*\\d+\\K.*", "", x, perl=TRUE)
答案 2 :(得分:1)
答案 3 :(得分:1)
您还可以将当前的正则表达式模式与stringr::str_extract
一起使用:
x <- c("Hubert 208 apt 1", "Mass Av 300, block 3")
stringr::str_extract(x, "^\\D*\\d+")
[1] "Hubert 208" "Mass Av 300"