gpt4 book ai didi

regex - 正则表达式以保持单个字符的运行计数

转载 作者:行者123 更新时间:2023-12-01 10:19:41 26 4
gpt4 key购买 nike

考虑以下向量 x

x <- c("000a000b000c", "abcd00ab", "abcdefg", "000s00r00g00t00") 

使用单个正则表达式,我只想保留 x 中包含三个以上字母的元素。以下是规则:

  1. 字母并不总是连续的(这是主要问题)
  2. x的字符串元素可以是任意数量的字符
  3. 除了数字和小写字母,字符串中没有任何内容

我想到的简单方法是删除所有不是字母的内容,然后取字符数,如下所示。

x[nchar(gsub("[0-9]+", "", x)) > 3]
# [1] "abcd00ab" "abcdefg" "000s00r00g00t00"

我知道有像 [a-z]{4,} 这样的语句可以找到四个或更多连续的小写字母。但是,如果单个字母散落在字符串中怎么办?我怎样才能保持字母的“运行计数”,以便当它超过三个时,它就变成不匹配?现在我能想到的就是多次编写 [a-z]+,但是如果我想匹配五个或更多字母,这会变得很丑陋。

这让我明白了,但是你可以看到对于更长的字符串来说这可能是多么丑陋。

grep("[a-z]+.*[a-z]+.*[a-z]+.*[a-z]+.*", x)
# [1] 2 3 4

有没有办法用更好的正则表达式来做到这一点?

最佳答案

试试这个,其中 \\D 匹配一个非数字,.* 匹配一个包含 0 个或更多字符的字符串并且 (...){4 表示匹配四次,即超过 3 次。

grep("(\\D.*){4}", x, value = TRUE)

如果有 4 个或更多的非数字,这将匹配。如果您需要超过 5 个,只需将 4 替换为 6。如果在正则表达式中使用数字 3 很重要,请尝试使用此模式 (\\D.*){3}\\D

关于regex - 正则表达式以保持单个字符的运行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574974/

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