Regex 从R上的数据中提取特定模式

Regex 从R上的数据中提取特定模式,regex,r,text-mining,Regex,R,Text Mining,我有一个.txt文件,里面有很多司法文本,但我只想提取日期,做进一步的分析和图形。这里有一个葡萄牙语的例子: AR-4024-03.2010.5.00.00002 ACORDAM os MINITROS da Egrégia 第二次特别法庭 特拉巴略高级酒店 奥尔迪纳里奥,在印度。巴西利亚,2011年10月24日。菲尔马多波尔酒店 数字助理MP 2.200-2/2001阿尔贝托·路易斯·布雷西亚尼·德丰坦 佩雷拉微型继电器fls。工序编号: TST-AR-4024-03.2010.5.00.00

我有一个.txt文件,里面有很多司法文本,但我只想提取日期,做进一步的分析和图形。这里有一个葡萄牙语的例子:

AR-4024-03.2010.5.00.00002 ACORDAM os MINITROS da Egrégia 第二次特别法庭 特拉巴略高级酒店 奥尔迪纳里奥,在印度。巴西利亚,2011年10月24日。菲尔马多波尔酒店 数字助理MP 2.200-2/2001阿尔贝托·路易斯·布雷西亚尼·德丰坦 佩雷拉微型继电器fls。工序编号: TST-AR-4024-03.2010.5.00.0000 Firmado por assinatura digital em 2011年5月26日,国会议员康莫塞德·特拉巴略(conforme MP)的司法系统(pelo sistema AssineJus da Justiça do Trabalho) 2.200-2/2001,巴西基础设施研究所


这个文件有很多这样的东西,但我只想提取突出显示的部分,并将它们放在一个单独的向量中。我一直在试着匹配,格雷普什么都没用。可能是因为我是R.的新手。

此模式将匹配您突出显示的表单日期:

"\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4}"
有关特殊字符和量词的详细信息,请参见?regex。您可以替换匹配的项目:

your_text <-  c("AR - 4024-03.2010.5.00.0000", "ACORDAM os Ministros da Egrégia Subseção II Especializada em Dissídios Individuais do Tribunal Superior do Trabalho, por unanimidade, não conhecer do recurso ordinário, por incabível. Brasília, 24 de maio de 2011. Firmado por assinatura digital (MP 2.200-2/2001) Alberto Luiz Bresciani de Fontan Pereira Ministro Relator fls. PROCESSO Nº TST-AR-4024-03.2010.5.00.0000 Firmado por assinatura digital em 26/05/2011 pelo sistema AssineJus da Justiça do Trabalho, conforme MP 2.200-2/2001, que instituiu a Infra-Estrutura de Chaves Públicas Brasileira.")

sub( "(.+ )(\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4})(.+)", "\\2", your_text[grepl("\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4}", your_text )
[1] "AR - 4024-03.2010.5.00.0000" "24 de maio de 2011" 

如果您需要使用模式来掌握使用捕获类的诀窍,那么有一些漂亮的regex测试网页。

当您说grep无效时……您尝试了什么?另外,您是如何将此文件读入R的?您需要仔细考虑日期输入的字符串中的位置、它们输入的各种模式和安排,并根据您的应用程序定制您的正则表达式。如果你想得到一些关于编写代码的建议,请给出更多日期可能采用的形式的例子。它非常有效。我发现主要问题在于我的档案阅读。关于正则表达式,它可以更简单,但你给了我启发。librarystringr dates=str|u extract|u alltext,\\d+de janeiro | fevereiro | mar|o | abril | maio | julho | agosto | setembro | outubro | novenbro | dejembro de\\d+您可能会将月份作为向量,在您的区域设置中可以将sep=|粘贴为month.abb或month.name-objects。我相信这个对象会国际化。如果它们需要大写或小写,则有tolower和toupper函数。
> sub( "(.+ )(\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4})(.+)", "\\2", your_text[grepl("\\d{1,2} de (janeiro|fevereiro|março|abril|maio|junho|julho|agosto|septembro|outubro|novembro|dezembro) de \\d{4}", your_text )])
[1] "24 de maio de 2011"