首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只提取带有正则表达式的ALLCAPS单词

只提取带有正则表达式的ALLCAPS单词
EN

Stack Overflow用户
提问于 2016-01-26 17:01:35
回答 3查看 1.7K关注 0票数 2

寻找一种只从文本字符串中提取所有大写单词的方法。问题是,它不应该提取文本字符串中混合大小写的其他单词。

例如,如何使用regex从以下句子中提取肯塔基州:

肯塔基州有很多选择

我试图在Google中使用regexextract()来实现这一点,它使用的是RE2。

期待听到你的想法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-26 23:24:38

假装您的文本在单元格A2中:

如果每个文本段中只有一个实例,这将有效:

代码语言:javascript
运行
复制
=REGEXEXTRACT(A2,"([A-Z]{2,})")

如果一个文本段中有多个实例,然后使用它,它将动态地调整正则表达式,为您提取每个事件:

代码语言:javascript
运行
复制
=REGEXEXTRACT(A2, REPT(".* ([A-Z]{2,})", COUNTA(SPLIT(REGEXREPLACE(A2,"([A-Z]{2,})","$"),"$"))-1))
票数 1
EN

Stack Overflow用户

发布于 2016-01-26 17:04:09

这应该是可行的:

代码语言:javascript
运行
复制
\b[A-Z]+\b

请参阅演示

票数 0
EN

Stack Overflow用户

发布于 2020-03-18 11:53:51

如果需要提取ALLCAPS中的整块单词,请使用

代码语言:javascript
运行
复制
=REGEXEXTRACT(A2,"\b[A-Z]+(?:\s+[A-Z]+)*\b")
=REGEXEXTRACT(A2,"\b\p{Lu}+(?:\s+\p{Lu}+)*\b")

这个regex演示

详细信息

  • \b -字边界
  • [A-Z]+ - 1+ ASCII字母(\p{Lu}匹配任何包含阿拉伯语的Unicode字母,等等)
  • (?:\s+[A-Z]+)* -- 的零次或多次重复
    • \s+ - 1+白空间
    • [A-Z]+ - 1+ ASCII字母(\p{Lu}匹配任何包含阿拉伯语的Unicode字母,等等)

  • \b -词边界。

或者,如果允许在大写字母之间使用标点符号或符号,则可以使用

代码语言:javascript
运行
复制
=REGEXEXTRACT(A2,"\b[A-Z]+(?:[^a-zA-Z0-9]+[A-Z]+)*\b")
=REGEXEXTRACT(A2,"\b\p{Lu}+(?:[^\p{L}\p{N}]+\p{Lu}+)*\b")

regex演示

在这里,[^a-zA-Z0-9]+匹配一个或多个字符( ASCII字母和数字除外),[^\p{L}\p{N}]+匹配除任何Unicode字母和数字以外的任何一个或多个字符。

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

https://stackoverflow.com/questions/35019496

复制
相关文章

相似问题

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