仅提取RE2正则表达式中的所有CAPS单词

时间:2016-01-26 17:01:35

标签: regex google-sheets re2

寻找一种从文本字符串中仅提取ALL CAPS中的单词的方法。问题在于它不应该提取文本字符串中混合大小写的其他单词。

例如,如何使用正则表达式从以下句子中提取KENTUCKY:

  

KENTUCKY中有很多选项

我尝试使用Google表格中的regexextract()来执行此操作,该表格使用RE2。

期待听到您的想法。

谢谢! 本

3 个答案:

答案 0 :(得分:0)

这应该有效:

\b[A-Z]+\b

请参阅demo

答案 1 :(得分:0)

假装您的文字位于单元格A2中:

如果每个文本段中只有一个实例,则可以使用:

=REGEXEXTRACT(A2,"([A-Z]{2,})")

如果单个文本段中有多个实例然后使用它,它将动态调整正则表达式以提取每个出现的事件:

=REGEXEXTRACT(A2, REPT(".* ([A-Z]{2,})", COUNTA(SPLIT(REGEXREPLACE(A2,"([A-Z]{2,})","$"),"$"))-1))

答案 2 :(得分:0)

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

=REGEXEXTRACT(A2,"\b[A-Z]+(?:\s+[A-Z]+)*\b")
=REGEXEXTRACT(A2,"\b\p{Lu}+(?:\s+\p{Lu}+)*\b")

请参见this regex demo

详细信息

  • \b-单词边界
  • [A-Z]+-1个以上ASCII字母(\p{Lu}与包括阿拉伯文等的所有Unicode字母匹配)
  • (?:\s+[A-Z]+)*-的零次或多次重复
    • \s+-超过1个空格
    • [A-Z]+-1个以上ASCII字母(\p{Lu}与包括阿拉伯文等的所有Unicode字母匹配)
  • \b-单词边界。

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

=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 demo

此处,[^a-zA-Z0-9]+匹配ASCII字母和数字以外的一个或多个字符,而[^\p{L}\p{N}]+匹配任何Unicode字母和数字以外的一个或多个字符。