如何删除字符串中第一个非零数字之前的所有零

Tar*_*Jae 1 regex r

我有以下带字符串的向量:

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 我怀疑这可能很容易,但我无法得到它。

我想学习正则表达式模式!

Tim*_*sen 5

这是使用 , 和环视的基本 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