2013-06-20 37 views
0

我想要提出正则表达式来确定国会记录中使用的特定命名约定。国会记录中的姓名匹配

国会记录中的演讲总是以演讲者的名字开头。例如,下面是一段摘录:

加利福尼亚州的DORNAN先生。议长先生,我打算屈服于我的朋友 ,但我有一个问题。情报委员会正在召集。

请问这位先生耐心等待15分钟吧 并观看?

RITTER先生。如果这位先生能给我6分钟的时间。

加利福尼亚州的DORNAN先生。这位先生可以在4岁吗?

先生先生,我屈服于来自宾夕法尼亚州的先生[先生de la CRUZ]。

德拉克鲁斯先生。等等等等

华盛顿的McCORMICK女士。

在国会记录中使用的命名约定是以一个标题(先生,女士,女士)和姓氏(全部大写)开头。在某些情况下,姓氏之后是州(如加利福尼亚州的DORNAN先生)。

在口头上,正则表达式应该与以下标准匹配的字符串:在字符串的开头

  1. 查找或者(先生,太太,小姐或)。
  2. (很少)这可能后面跟着一些小写字母(如'de la CRUZ'的例子)。
  3. 查找一个名称中的所有(或大部分所有,如在与McCormick例子)帽
  4. (在某些情况下)的名称之后,将
  5. 结束的期间“[状态名称]”。

首先是容易与完成^(先生|女士|女士)

但它的其余部分有我卡住了。

+0

解析器和语法将是一个更好的主意。 – duffymo

+0

你需要提取个人元素吗?如果没有,你只需要跟随先驱者的时期,对吧? –

+0

你可以添加预期的结果吗? – agstudy

回答

1

如何如下:

^((?:Mr\.|Mrs\.|Ms\.) [^.]*[A-Z]{2,})(?:(?: of)([^.]*)){0,1}\. 

http://rubular.com/r/RWs7k9f0pd

+0

根据姓氏以至少两个连续大写字母结尾的假设进行更新。 –

1

并不完美,但我认为这是一个良好的开端:

regmatches(xx,gregexpr('^((Mr|Mrs|Ms)[.][^.]*)[.]',xx)) 

[[1]] 
[1] "Mr. DORNAN of California." 
[[2]] 
character(0) 
[[3]] 
[1] "Mr. RITTER." 
[[4]] 
[1] "Mr. DORNAN of California." 
[[5]] 
[1] "Mr. Speaker, I yield to the gentleman from Pennsylvania [Mr." 
[[6]] 
[1] "Mr. de la CRUZ." 
[[7]] 
[1] "Ms. McCORMICK of Washington." 

其中xx是:

xx <- c("Mr. DORNAN of California. Mr. Speaker, I was going to yield to my friend, but I have a problem. The Intelligence Committee is convening.", 
"Could I ask the gentleman to be patient because of that for 15 minutes and watch?", 
"Mr. RITTER. If the gentleman could give me just 6 minutes.", 
"Mr. DORNAN of California. Can the gentleman do it in 4?", 
"Mr. Speaker, I yield to the gentleman from Pennsylvania [Mr. de la CRUZ].", 
"Mr. de la CRUZ. blah blah blah", 
"Ms. McCORMICK of Washington.") 
相关问题