使用r正则表达式删除第一个数字后的字符串
如何删除字符串第一个数字之后包含的所有内容使用r正则表达式删除第一个数字后的字符串,r,regex,R,Regex,如何删除字符串第一个数字之后包含的所有内容 x <- c("Hubert 208 apt 1", "Mass Av 300, block 3") 但所需的输出如下所示: [1] "Hubert 208" "Mass Av 300" > 在OP的当前代码中,一个微小的更改可以使其工作,即将匹配模式捕获为一个组((…)),并替换为反向引用(\\1) 这里,OP中的模式意味着(“^\\D*\\D+”)-从字符串的开头(^)开始(^)有零个或多个不是数字的字符(\\\D*),然
x <- c("Hubert 208 apt 1", "Mass Av 300, block 3")
但所需的输出如下所示:
[1] "Hubert 208" "Mass Av 300"
>
在OP的当前代码中,一个微小的更改可以使其工作,即将匹配模式捕获为一个组(
(…)
),并替换为反向引用(\\1
)
这里,OP中的模式意味着(“^\\D*\\D+”
)-从字符串的开头(^
)开始(^
)有零个或多个不是数字的字符(\\\D*
),然后是一个或多个数字(\\D+
),并将其作为一个带参数的组((…)
)捕获
此外,我们只需要
sub
(全局替换),而不是gsub
,因为我们只需要匹配一个实例(从一开始)此表达式可能稍微安全一些
^\s*(.+?)([0-9]+)
替换的另一个选项是使用表达式并使用匹配 您的模式将匹配到第一个数字之后,方法是从字符串的开头匹配0+次非数字
\D*
,然后再匹配1+次数字\D+
:
^\\D*\\d+
如果将sub与perl=TRUE一起使用,则可以使用\K
来忘记匹配的内容
然后您可以使用:
^\\D*\\d+\\K.*
在替换中,请使用空字符串
sub("^\\D*\\d+\\K.*", "", x, perl=TRUE)
您还可以将当前的正则表达式模式与
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"
x成功了,谢谢。你能解释一下这些符号的含义吗?@NBK我补充了一些描述。希望能有帮助
sub("^\\D*\\d+\\K.*", "", x, perl=TRUE)
x <- c("Hubert 208 apt 1", "Mass Av 300, block 3")
stringr::str_extract(x, "^\\D*\\d+")
[1] "Hubert 208" "Mass Av 300"