正则表达式以获得以大写字母开头的单词或一系列单词

时间:2015-03-26 20:17:48

标签: regex

我希望得到所有以大写字母开头的单词,以及每组以大写字母开头的连续单词。

例如在句子中,

  奥巴马在华盛顿告诉记者,他和内塔尼亚胡都反对   伊朗呼吁“致美国之死”

我想要

[Obama, Washington, Netanyahu, Iran's, Death To America]

我试过

([A-Z][a-z]*\s)+

意思是“大写字母后跟任意数量的小写字母后跟空格,任意次。”

我虽然这可行,但事实并非如此。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

Iran's[A-Z][a-z]不匹配;在您的设置中添加'

Death To America完全不匹配,因为最后一个单词后面没有空格。

两者都由

确定
([A-Z][a-z']*)(\s[A-Z][a-z']*)*

你没有不以资本开头的文字,而是介于两者之间;如果您想忽略这些,请使用Word Breaks:

\b([A-Z][a-z']*)(\s[A-Z][a-z']*)*\b

答案 1 :(得分:1)

您可以使用重复“零次或多次”的可选组修改正则表达式。

[A-Z][a-z']+(?: [A-Z][a-z]+)*

Live Demo

答案 2 :(得分:0)

假设你喜欢最长的匹配,那么

([A-Z][\w']*(?:\s+[A-Z][\w']*)*)

申请g,应该获得所有分组。

[A-Z][\w']*

匹配您想要匹配的单个字词。

然后

(?:\s+[A-Z][\w']*)*

将匹配此类单词的任意数量的序列。