gpt4 book ai didi

regex - R 正则表达式,试图捕获一组

转载 作者:行者123 更新时间:2023-12-02 06:57:43 25 4
gpt4 key购买 nike

我已经阅读了一些关于正则表达式中的 R 捕获组的其他问题,但我的运气并不好。

我有一个字符串:

127.0.0.1 - - [07/Dec/2014:06:43:43 -0800] \"OPTIONS * HTTP/1.0\" 200 - \"-\" \"Apache/2.2.14 (Ubuntu) PHP/5.3.2-1ubuntu4.24 with Suhosin-Patch mod_ssl/2.2.14 OpenSSL/0.9.8k mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 (internal dummy connection)\"

我试图从中获取时间戳:

07/Dec/2014:06:43:43 -0800

以下函数调用返回一个匹配项:

regmatches(x,regexpr('\\[([\\w:/]+\\s[+\\-]\\d{4})\\]',x,perl=TRUE))
[1] "[07/Dec/2014:06:43:43 -0800]"

我尝试使用 str_match 和这个正则表达式的不同变体来捕获单个组本身:

str_match(x, "\\[([\\w:/]+\\s[+\\-]\\d{4})\\]")
[,1] [,2]
[1,] NA NA

没有用。在大多数在线正则表达式测试器中,这个正则表达式的不同种类都可以正确测试,所以我认为正则表达式不是问题所在。

我怎样才能只得到时间戳本身,这样我就可以把它抽到 strptime 中,而不用做 gsub 之类的事情? gsub 无法为我获取组,str_match 不起作用,我错过了什么?理想的输出是

07/Dec/2014:06:43:43 -0800

然后我可以在 strptime 中使用它。

最佳答案

使用\k (\K 将文本匹配到整个正则表达式匹配之外。)和积极的前瞻。

> regmatches(x,regexpr('\\[\\K[\\w:/]+\\s[+\\-]\\d{4}(?=\\])',x,perl=TRUE))
[1] "07/Dec/2014:06:43:43 -0800"
\\[\\K 中的

\\K 丢弃先前匹配的 [ 字符。

关于regex - R 正则表达式,试图捕获一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27967013/

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