寻找一种从文本字符串中仅提取ALL CAPS中的单词的方法。问题在于它不应该提取文本字符串中混合大小写的其他单词。
例如,如何使用正则表达式从以下句子中提取KENTUCKY:
KENTUCKY中有很多选项
我尝试使用Google表格中的regexextract()来执行此操作,该表格使用RE2。
期待听到您的想法。
谢谢! 本
答案 0 :(得分:0)
答案 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字母和数字以外的一个或多个字符。