gpt4 book ai didi

regex - 仅删除前 N 个字符中的任何数字

转载 作者:行者123 更新时间:2023-12-01 21:17:46 24 4
gpt4 key购买 nike

我正在寻找一个正则表达式来捕获字符串中前 7 个字符中的所有数字。

该字符串有 12 个字符:

A12B345CD678

我只想删除 AB,因为它们位于前 7 个字符 (A12B345) 内并得到

12345CD678

因此,不应触摸 CD678。我当前的 R 解决方案:

paste(paste(str_extract_all(substr("A12B345CD678",1,7), "[0-9]+")[[1]],collapse=""),substr("A12B345CD678",8,nchar("A12B345CD678")),sep="‌​") 

好像太复杂了。我按照描述在 7 处分割字符串,匹配前 7 个字符中的任何数字,并将其与字符串的其余部分绑定(bind)。

寻找一般答案,我当前的解决方案是拆分前 7 个字符并仅匹配该子字符串中的所有数字。

感谢任何帮助。

最佳答案

您可以使用已知的SKIP-FAIL regex trick匹配以第 8 个字符开头的字符串的所有其余部分,并且仅使用后向匹配前 7 个字符中的非数字字符:

s <- "A12B345CD678"
gsub("(?<=.{7}).*$(*SKIP)(*F)|\\D", "", s, perl=T)
## => [1] "12345CD678"

参见IDEONE demo

perl=T此正则表达式需要工作。正则表达式分割:

  • (?<=.{7}).*$(*SKIP)(*F) - 匹配除换行符之外的任何字符(如果输入中有换行符,则在开头添加 (?s) ),尽可能多( .* )到末尾( $ ,也可能需要 \\z删除最后的换行符),但前提是前面有 7 个字符(这是由后行 (?<=.{7}) 设置的)。 (*SKIP)(*F)动词使引擎忽略整个匹配的文本,并将正则表达式索引前进到该文本末尾的位置。
  • | - 或者...
  • \\D - 非数字字符。

请参阅regex demo .

关于regex - 仅删除前 N 个字符中的任何数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35410349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com