gpt4 book ai didi

正则表达式匹配特定字符的确切数量

转载 作者:行者123 更新时间:2023-12-05 01:18:06 25 4
gpt4 key购买 nike

假设我想找到字母“e”恰好出现两次的所有单词。当我定义这个模式时:

pattern1 <- "e.*e" 
grep(pattern1, stringr::words, value = T)

RegEx 也匹配诸如“therefore”之类的词,因为“e”也(至少)出现了两次。关键是,我不希望我的模式是“至少”,我希望它是“恰好 n 次”。

这个模式...

  pattern2 <- "e{2}"

...查找带有两个字母“e”的单词,但前提是它们一个接一个地出现(“feel”、“agre”等)。我想结合这两种模式来查找所有具有字母“e”不一定连续出现的确切次数的单词。

最佳答案

您可以使用:

^(?:[^e]*e){2}[^e]*$

regex demo . (?:...) 是一个非捕获组,允许量化子模式的序列,因此可以轻松调整以匹配 3、4 或更多特定序列一个字符串。

详情

  • ^- 字符串的开始
  • (?:[^e]*e){2} - 出现 2 次
    • [^e]* - 除了 e
    • 之外的任何 0+ 个字符
    • e - e
  • [^e]* - 除了 e
  • 之外的任何 0+ 个字符
  • $ - 字符串结尾

R demo below :

x <- c("feel", "agre", "degree")
rx <- "^(?:[^e]*e){2}[^e]*$"
grep(rx, x, value = TRUE)
## => [1] "feel"

请注意,使用 value = TRUE 代替 value = T 更安全,因为 T 可能会在上面的代码中重新定义。

关于正则表达式匹配特定字符的确切数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46928343/

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