我正在尝试使用str_extract在文本文档中查找日期。但是,我遇到了一个难题。通常,我希望日期以两种形式之一出现:1)June 15th, 1914 2)June 15, 1914。但是,当我尝试构建一个模式来捕获这两个选项时,会得到一个NA结果。

例如,如果我尝试str_extract("No. 1. June 20th, 1914.", "[:alpha:]{3,8} [0-9]{1,2}[[a-z]{2}]?, [0-9]{4}"),则得到NA。但是,如果我删除[a-z]{2}周围的括号,它将起作用。但是,如果卸下括号,我当然会为字符串NA得到一个"No. 1. June 20, 1914."。但是,如果我放下括号,这确实可行。

我当然可以通过使用简单的if/else if语句来解决此问题,但是我很好奇为什么它不起作用,以及是否有更好的方法来处理这些合并的情况。

最佳答案

由于以下原因,它不起作用:


您的POSIX字符类未正确包装在带括号的表达式中。
您正在尝试使用字符类作为可选的组构造。


您固定的正则表达式如下所示:

x <- 'No. 1. June 20th, 1914.'
str_extract(x, '[[:alpha:]]{3,8} [0-9]{1,2}([a-z]{2})?, [0-9]{4}')
## [1] "June 20th, 1914"


您可以修改正则表达式:

str_extract(x, '[a-zA-Z]+ \\d{1,2}([a-z]{2})?, \\d{4}')

07-24 09:54