【发布时间】:2016-02-15 13:15:27
【问题描述】:
我正在寻找一个正则表达式来捕获字符串前 7 个字符中的所有数字。
这个字符串有 12 个字符:
A12B345CD678
我只想删除 A 和 B,因为它们在前 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 个字符中的任何数字并将其与字符串的其余部分绑定。
寻找一个普遍的答案,我目前的解决方案是拆分前 7 个字符,只匹配这个子字符串中的所有数字。
任何帮助表示赞赏。
【问题讨论】:
-
你的问题对我来说没有任何意义。
12345CD678超过 7 个字符,甚至超过 7 个数字 - 你说的the first E-F是什么意思? -
您的示例令人困惑。什么是“前 E-F 7 个字符”?为什么你也匹配CD,即使它们不是数字?
-
请发布您当前的解决方案。
-
更清楚地说,A12B345CD678 有 12 个字符。我想匹配前 7 个字符中的所有数字,因此不会触及 CD678。我目前在 R 中的解决方案: paste(paste(str_extract_all(substr("A12B345CD678",1,7), "[0-9]+ ")[[1]],collapse=""),substr("A12B345CD678",8,nchar("A12B345CD678")),sep="") 这似乎很复杂。我按照描述将字符串拆分为 7,匹配前 7 个字符中的任何数字并将其与字符串的其余部分绑定。
-
似乎你需要可变长度的lookbehind like this demo:
(?<=^.{0,6})\D,这在R regex 风格中不可用。 This could work 和perl=TRUE但看起来更难维护。