正则表达式 – R中的正则表达式括号之谜

我正在尝试使用str_extract在文本文档中查找日期.但是,我遇到了一个难题.一般来说,我希望日期有两种形式:1)1914年6月15日2)1914年6月15日.但是当我尝试构建一个模式来捕获这两个选项时,我得到了NA结果.

例如,如果我尝试str_extract(“No.1.1914年6月20日.”,“[:alpha:] {3,8} [0-9] {1,2} [[az] {2}] ?,[0-9] {4}“),我得到NA.但如果我删除[a-z] {2}周围的括号,它就可以了.但是,如果我删除括号,我当然会获得字符串“No.1.1914年6月20日”的NA.但是,如果我留下括号,这确实有效.

我当然可以通过使用简单的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}')

转载注明原文:正则表达式 – R中的正则表达式括号之谜 - 代码日志