首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找第一个字母大写的连续单词的Regex

查找第一个字母大写的连续单词的Regex
EN

Stack Overflow用户
提问于 2010-11-06 12:25:45
回答 4查看 10.2K关注 0票数 5

我正在寻找一个正则表达式,它可以在句子中识别一个句子中以大写字母开头的连续单词。

如果我们以下面的案文为例:

A-Z集团是为全球航空货运界提供信息以及通过英国国防设备目录和英国国防工业目录出版商为国防和安全部门提供信息的长期市场领先者。

我希望能够检索以下内容:

A-Z群

BDEC有限公司国防装备

英国国防目录

IndustryDefence产业

这能用正则表达式吗?如果是的话,有人能提出建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-06 12:32:03

(更新:我一开始误解了你的问题。)

一个简单的例子是

代码语言:javascript
复制
/([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"]

票数 12
EN

Stack Overflow用户

发布于 2010-11-06 12:35:39

希望这能做你想做的事,但如果我误解了,很抱歉:

代码语言:javascript
复制
([A-Z][a-zA-Z0-9-]*[\s]{0,1}){2,}

regex搜索两个或多个连续出现的以下序列:大写字母后面跟着任意数量的小写/大写/数字/连字符(当然,将其更改为任意范围的非空格字符以满足您的需要),然后是空格字符。

编辑:我知道这是常识,但只要确保你把regex搜索设置为区分大小写,当我测试它时,我就知道了。

编辑:正如動靜能量所指出的,上面的regex将匹配单个单词The,因为它并不强制至少前两个项必须在它们之间有一个空格。更正版本:

代码语言:javascript
复制
([A-Z][a-zA-Z0-9-]*)([\s][A-Z][a-zA-Z0-9-]*)+
票数 4
EN

Stack Overflow用户

发布于 2010-11-06 12:50:29

首先要从非技术角度思考。你想要什么?一个“单词”,后面跟着一个或多个“单词分隔符”,后面跟着一个单词。

现在只需要定义"word“和"word分隔符”的模式,然后将它们组合成一个完整的模式。

当你这样分解它时,一个复杂的正则表达式只不过是几个非常简单的模式组。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4113051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档