我有以下带字符串的向量:
strings <- c("ABC0001", "ABC02", "ABC10", "ABC01010", "ABC11", "ABC011", "ABC0120")
"ABC0001" "ABC02" "ABC10" "ABC01010" "ABC11" "ABC011" "ABC0120"
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[1] "ABC1" "ABC2" "ABC10" "ABC1010" "ABC11" "ABC11" "ABC120"
Run Code Online (Sandbox Code Playgroud)
我的问题:字符串中第一个整数之前的零的正则表达式模式是什么?
到目前为止我已经尝试过:
library(stringr)
str_replace(strings,'0+', "")
Run Code Online (Sandbox Code Playgroud)
这使:
[1] "ABC1" "ABC2" "ABC1" "ABC1010" "ABC11" "ABC11" "ABC120"
Run Code Online (Sandbox Code Playgroud)
ABC1注意:位置 3不需要。应该是ABC10
我怀疑这可能很容易,但我无法得到它。
我想学习正则表达式模式!
这是使用 , 和环视的基本 R 选项sub:
strings <- c("ABC0001", "ABC02", "ABC10", "ABC01010", "ABC11", "ABC011", "ABC0120")
output <- sub("(?<=[A-Z])0+(?=.)", "", strings, perl=TRUE)
output
[1] "ABC1" "ABC2" "ABC10" "ABC1010" "ABC11" "ABC11" "ABC120"
Run Code Online (Sandbox Code Playgroud)
以下是对所使用的正则表达式模式的解释:
(?<=[A-Z]) assert that an uppercase letter precedes
0+ match one or more zeroes
(?=.) assert that some character follows
Run Code Online (Sandbox Code Playgroud)
和称为lookarounds。(?<=.) 在这种情况下,他们确保我们的目标不在输入值的最开始或最末尾。对于像 之类的输入,我们希望输出为,即不应删除最后的零。(?=.)0ABC110ABC110