我正在寻找一个正则表达式,它可以在句子中识别一个句子中以大写字母开头的连续单词。
如果我们以下面的案文为例:
A-Z集团是为全球航空货运界提供信息以及通过英国国防设备目录和英国国防工业目录出版商为国防和安全部门提供信息的长期市场领先者。
我希望能够检索以下内容:
A-Z群
BDEC有限公司国防装备
英国国防目录
IndustryDefence产业
这能用正则表达式吗?如果是的话,有人能提出建议吗?
发布于 2010-11-06 12:32:03
(更新:我一开始误解了你的问题。)
一个简单的例子是
/([A-Z][\w-]*(\s+[A-Z][\w-]*)+)/如果有不同语言结构的特殊情况,则可能需要修改。
ruby-1.9.2-p0 > %Q{The A-Z Group is a long-established market leader in the provision of information for the global air cargo community, and also for the defence and security sectors through BDEC Limited, publishers of the British Defence Equipment Catalogue and British Defence Industry Directory.}.scan(/([A-Z][\w-]*(\s+[A-Z][\w-]*)+)/).map{|i| i.first}
=> ["The A-Z Group", "BDEC Limited", "British Defence Equipment Catalogue", "British Defence Industry Directory"]
发布于 2010-11-06 12:35:39
希望这能做你想做的事,但如果我误解了,很抱歉:
([A-Z][a-zA-Z0-9-]*[\s]{0,1}){2,}regex搜索两个或多个连续出现的以下序列:大写字母后面跟着任意数量的小写/大写/数字/连字符(当然,将其更改为任意范围的非空格字符以满足您的需要),然后是空格字符。
编辑:我知道这是常识,但只要确保你把regex搜索设置为区分大小写,当我测试它时,我就知道了。
编辑:正如動靜能量所指出的,上面的regex将匹配单个单词The,因为它并不强制至少前两个项必须在它们之间有一个空格。更正版本:
([A-Z][a-zA-Z0-9-]*)([\s][A-Z][a-zA-Z0-9-]*)+发布于 2010-11-06 12:50:29
首先要从非技术角度思考。你想要什么?一个“单词”,后面跟着一个或多个“单词分隔符”,后面跟着一个单词。
现在只需要定义"word“和"word分隔符”的模式,然后将它们组合成一个完整的模式。
当你这样分解它时,一个复杂的正则表达式只不过是几个非常简单的模式组。
https://stackoverflow.com/questions/4113051
复制相似问题