gpt4 book ai didi

regex - 使用 grepl 在 R 中使用正则表达式提取日期

转载 作者:行者123 更新时间:2023-12-05 03:13:58 25 4
gpt4 key购买 nike

我提前道歉,这可能是一个重复的问题。但是,我刚刚花了最后一个小时在 stackoverflow 上,似乎找不到解决方案。我在 R 中使用 grepl 尝试提取字符串中的一些日期,但我注意到意外行为。

假设我们有一个字符串向量

mystring = c("12-03-99", "A", "B")
date = grepl("[1-9]{2}", mystring)

> 日期
[1] 真假假

这对我来说很有意义。但是,如果我尝试在正则表达式中添加“-”,则会产生意外行为。例如

mystring = c("12-03-99", "A", "B")
date = grepl("[1-9]{2}-[1-9]{2}-[1-9]{2}", mystring)

> 日期
[1] 假假假假

为什么第二个示例对于向量 mystring ("12-03-99") 的第一个元素产生 False?

预先感谢您的帮助!

文森特

最佳答案

Regex101

这是一个简单的错误:

你正在使用 [1-9] 但你想要 [0-9]

由于您的日期 12-03-99 中有一个 0,因此您的字符数组中需要它。

尝试:

mystring = c("12-03-99", "A", "B")
date = grepl("[0-9]{2}-[0-9]{2}-[0-9]{2}", mystring)

date = grepl("\d{2}-\d{2}-\d{2}", mystring)

正则表达式:

[0-9]{2}-[0-9]{2}-[0-9]{2}

Regular expression visualization

Debuggex Demo


注意事项

这还将捕获 00-00-00 作为有效日期。

要解决此问题,只需使用以下正则表达式:

[0-9]?[1-9]-[0-9]?[1-9]-[0-9]?[1-9]

这可以缩短为:

\d?[1-9]-\d?[1-9]-\d?[1-9]

然后改为Regex101 :

(\d?[1-9]-){2}\d?[1-9]

关于regex - 使用 grepl 在 R 中使用正则表达式提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27711215/

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