我提前道歉,这可能是一个重复的问题。但是,我刚刚花了最后一个小时在 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}
注意事项
这还将捕获 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/