gpt4 book ai didi

R lookbehind 断言中的正则表达式

转载 作者:行者123 更新时间:2023-12-05 07:24:39 24 4
gpt4 key购买 nike

我正在尝试使用 tidyr 中的 extract 函数进行一些模式匹配。我已经在正则表达式练习网站上测试了我的正则表达式,该模式似乎有效,而且我正在使用 lookbehind assertion

我有以下示例文本:

=[\"{ Key = source, Values = web,videoTag,assist }\",\"{ Key = type, 
Values = attack }\",\"{ Key = team, Values = 2 }\",\"{ Key =
originalStartTimeMs, Values = 56496 }\",\"{ Key = linkId, Values =
1551292895649 }\",\"{ Key = playerJersey, Values = 8 }\",\"{ Key =
attackLocationStartX, Values = 3.9375 }\",\"{ Key =
attackLocationStartY, Values = 0.739376770538243 }\",\"{ Key =
attackLocationStartDeflected, Values = false }\",\"{ Key =
attackLocationEndX, Values = 1.7897727272727275 }\",\"{ Key =
attackLocationEndY, Values = -1.3002832861189795 }\",\"{ Key =
attackLocationEndDeflected, Values = false }\",\"{ Key = lastModified,
Values = web,videoTag,assist

我想获取 attackLocationX 之后的数字(所有关于攻击位置的文本之后的数字。

但是,将以下代码与后向断言一起使用,我没有得到任何结果:

df %>% 
extract(message, "x_start",'((?<=attackLocationStartX,/sValues/s=/s)[0-
9.]+)')

如果未找到模式匹配,此函数将返回 NA,并且我的目标列是所有 NA 值,尽管已在 www.regexr 上测试了该模式。 com。根据文档,R 模式匹配支持后向断言,所以我不确定在这里还能做什么。

最佳答案

首先,要匹配空格,您需要\s,而不是/s

您不必在此处使用回顾,因为如果模式中使用了捕获组,extract 将返回捕获的子字符串。

使用

df %>% 
extract(message, "x_start", "attackLocationStartX\\s*,\\s*Values\\s*=\\s*(-?\\d+\\.\\d+)")

输出:3.9375

正则表达式也可能类似于 "attackLocationStartX\\s*,\\s*Values\\s*=\\s*(-?\\d[.0-9]*)".

由于捕获了 (-?\\d+\\.\\d+) 部分,因此只会输出该组中的文本。

图案细节

  • (-?\d+\.\d+) - 匹配的捕获组
    • -? - 一个可选的连字符(? 表示 1 次或 0 次出现)
    • \d+ - 1 或 or 数字(+ 表示 1 或更多)
    • \. - 一个点
    • \d+ - 1 或 or 数字
  • \d[.0-9]* - 一个数字 (\d),后跟 0 个或多个点或数字 ([.0- 9]*)

关于R lookbehind 断言中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55281915/

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