R lookback断言中的正则表达式
我正在尝试使用R lookback断言中的正则表达式,r,regex,lookbehind,R,Regex,Lookbehind,我正在尝试使用tidyr中的extract函数进行一些模式匹配。我已经在一个regex实践站点上测试了我的regex,该模式似乎有效,我正在使用lookback断言 我有以下示例文本: =[\"{ Key = source, Values = web,videoTag,assist }\",\"{ Key = type, Values = attack }\",\"{ Key = team, Values = 2 }\",\"{ Key = originalStartTimeMs, Valu
tidyr
中的extract
函数进行一些模式匹配。我已经在一个regex实践站点上测试了我的regex,该模式似乎有效,我正在使用lookback断言
我有以下示例文本:
=[\"{ 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
后面的数字(关于攻击位置的任何文本后面的所有数字)
但是,使用以下带有Lookback断言的代码,我没有得到任何结果:
df %>%
extract(message, "x_start",'((?<=attackLocationStartX,/sValues/s=/s)[0-
9.]+)')
df%>%
提取(消息,“x_start”,”(?我不确定lookbehind部分,但在R中,您需要转义反斜杠。如果您使用的是非R特定的正则表达式检查器,这一点并不明显
更多信息
因此,您可能希望您的正则表达式看起来像:
"attackLocationStartX,\\sValues\\s=\\s)[0-9.]+"
首先,要匹配空白,您需要\s
,而不是/s
您不必在这里使用lookbehind,因为如果模式中使用了捕获组,extract
将返回捕获的子字符串
使用
输出:3.9375
正则表达式也可能类似于“attackLocationStartX\\s*,\\s*Values\\s*=\\s*(?\\d[.0-9]*)”
当捕获(?\\d+\\.\\d+
部分时,仅此组中的文本将作为输出
图案细节
(?\d+\.\d+)
-捕获组thst匹配
-?
-可选连字符(?
表示出现1次或0次)
\d+
-1或多个数字(+
表示1或多个)
\。
-一个点
\d+
-1或数字
\d[.0-9]*
-一个数字(\d
),后跟0个或多个点或数字([.0-9]*
)
为什么要向后看?似乎您正在查找攻击位置开始发送后的“值”
。请尝试提取(消息,“x\u开始”,“攻击位置开始发送\\s*,\\s*值\\s*=\\s*(?\\d+\\\\\\d+))
。它提取了3.9375
。这是预期的结果吗?或者你需要其他结果吗?@WiktorStribiżew这非常有效。-?
做什么?我以前没见过。-?
是可选的连字符。顺便说一句,我贴了一个。
df %>%
extract(message, "x_start", "attackLocationStartX\\s*,\\s*Values\\s*=\\s*(-?\\d+\\.\\d+)")