gpt4 book ai didi

R正则表达式重复

转载 作者:行者123 更新时间:2023-12-01 22:53:05 26 4
gpt4 key购买 nike

阅读 R4DS 字符串章节时,我对以下正则表达式示例感到困惑:

x <- "1888 is the longest year in Roman numerals: MDCCCLXXXVIII"

str_view(x, "C?")

此代码返回不匹配

使用 ? 我理解指定匹配 0 次或 1 次并且重复是“贪婪的”并且将匹配可能的最长字符串,那么为什么不匹配 1 个“C”?

另外,下面的代码匹配第一个“CC”:

x <- "1888 is the longest year in Roman numerals: MDCCCLXXXVIII"

str_view(x, "CC?")

谢谢

最佳答案

我认为它确实返回了一个匹配项,但它是一个空字符串。

解释:

  1. 正则表达式引擎首先检查第一个字符是否匹配
  2. M 不匹配 C
  3. 等等,C 是可选的。
  4. 空字符串匹配。
  5. 成功!

另一方面,CC? 无法在字符串的开头匹配,因此引擎必须遍历字符串,直到找到第一个 C,然后无论有多少 C 都会匹配。

道德:永远不要构建所有标记都是可选的正则表达式,允许空匹配(除非您正计划这样做)。

关于R正则表达式重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53608229/

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