0

我正在尝试提出正则表达式来识别国会记录中使用的特定命名约定。

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

加利福尼亚的多南先生。议长先生,我打算向我的朋友让步,但我有一个问题。情报委员会正在召开会议。

我可以请这位先生因此耐心等待 15 分钟并观看吗?

里特先生。如果这位先生能给我6分钟。

加利福尼亚的多南先生。大佬能在4内做到吗?

议长先生,我向来自宾夕法尼亚的绅士让步[Mr. 德拉克鲁兹]。

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

华盛顿的麦考密克女士。

国会记录中使用的命名约定是以头衔(先生、夫人、女士)开头,然后是姓氏(全部大写)。在某些情况下,姓氏后面是州(如加利福尼亚州的 DORAN 先生)。

换句话说,正则表达式应该匹配符合以下条件的字符串:

  1. 在字符串的开头查找(先生、夫人或女士)。
  2. (很少)这后面可能会跟着一些小写单词(如“de la CRUZ”示例中)。
  3. 在所有(或几乎所有,如 McCORMICK 示例中)大写字母中查找名称
  4. (在某些情况下)名称后跟“of [state name]”
  5. 以句号结束。

第一个很容易用 ^(Mr.|Mrs.|Ms.) 完成

但其余的让我卡住了。

4

2 回答 2

1

以下情况如何:

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

http://rubular.com/r/RWs7k9f0pd

于 2013-06-20T16:08:57.493 回答
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.")
于 2013-06-20T16:18:16.880 回答