假设我们有一个字符串向量
mystring = c("12-03-99", "A", "B")
date = grepl("[1-9]{2}", mystring)
> date
[1] TRUE FALSE FALSE
这对我有意义。但是,如果我尝试在正则表达式中添加“ - ”,则会产生意外行为。例如
mystring = c("12-03-99", "A", "B")
date = grepl("[1-9]{2}-[1-9]{2}-[1-9]{2}", mystring)
> date
[1] FALSE FALSE FALSE
为什么第二个例子对向量mystring的第一个元素(“12-03-99”)产生False?
提前感谢您的帮助!
文森特
答案 0 :(得分:4)
这是一个简单的错误:
您使用的是[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]