2013-11-26 141 views
0

我有一个类似2页长的文本文件,我需要编写一个正则表达式来提取以大写字母开头的单词。 ,我想获得(但不限于)有些词的例子是:以大写字母开头的单词的正则表达式

British Indian Ocean Territory 
People's Republic of China Confederation of Independent States 
French Southern and Antarctic Lands 
Gilbert and Ellia Islands 
Iraq-Saudia Arabia Neutral Zone 
Juan de Nova Island 
St. Vincent and the Grenadines 
Trust Territory of the Pacific 
Washington, D.C. 

,我想出了正则表达式是:

"((?:[A-Z][a-z]+\\s){2,4}?) || ((?:[A-Z][a-z]+\\s){1,2}of(?:\\s[A-Z][a-z]+){1,2}) || ((?:[A-Z][a-z]+\\s){1,2}and(?:\\s[A-Z][a-z]+){1,2})" 
+2

恭喜。那对你有用吗? – 2013-11-26 18:54:31

+0

那么......这个正则表达式有什么问题吗?如果是这样,什么? – ajp15243

+0

你试图做的事情对正则表达式来说是不可能的,因为你似乎想要提取的不仅是单个单词而是表达式(例如:“中华民国独立国家联合会”)。请记住,不使用字典是不可能的。 –

回答

3

使用这个表达式

\b[A-Z].*?\b 

http://rubular.com/r/HG7YJLgkc3

REGEXPLANATION:

  • \b是一个字边界。它开始匹配和0次以上,
  • ?使得以前*非贪婪的一句话结束
  • .匹配任何字符,
  • *匹配前面的字符,所以它的几个字符,因为它匹配可以代替的整串
+0

lolypoint +1 <°))))))))> –

+1

我需要“and”,“or”和“the”。这个正则表达式也不允许我得到所有格的结尾或连字符。 – user3013832

+0

如果您需要整行,请用'\'替换'\ b [A-Z]。*?$'替换最后一个'\ b'。那应该解决这两个问题 –

0

这得到哟八九不离十:

(\b[A-Z].*?\b('s|-|\.|,)?(\s((the|and|of|de)\s)*)?)+ 

检查:http://rubular.com/r/5LpVm0oKtu

+0

我需要“和”,“或”和“这个”。这个正则表达式也不允许我得到所有格的结尾或连字符。 – user3013832

+0

更新了正则表达式。 –

1

此正则表达式应该工作:

"\\b(([A-Z]\\S*)|and|or|the)\\b" 
+0

忘了提及我需要“和”,“或”和“这个”。 – user3013832

+0

@ user3013832:现在检查更新的答案。 – anubhava

0

这是否会实现你在找什么? [A-Z]\S*\s

您使用的正则表达式可能会随实现而略有变化,您可能必须使用一些标志来允许多行搜索和多个匹配。

相关问题