寻找一种只从文本字符串中提取所有大写单词的方法。问题是,它不应该提取文本字符串中混合大小写的其他单词。
例如,如何使用regex从以下句子中提取肯塔基州:
肯塔基州有很多选择
我试图在Google中使用regexextract()
来实现这一点,它使用的是RE2。
期待听到你的想法。
发布于 2016-01-26 23:24:38
假装您的文本在单元格A2中:
如果每个文本段中只有一个实例,这将有效:
=REGEXEXTRACT(A2,"([A-Z]{2,})")
如果一个文本段中有多个实例,然后使用它,它将动态地调整正则表达式,为您提取每个事件:
=REGEXEXTRACT(A2, REPT(".* ([A-Z]{2,})", COUNTA(SPLIT(REGEXREPLACE(A2,"([A-Z]{2,})","$"),"$"))-1))
发布于 2016-01-26 17:04:09
发布于 2020-03-18 11:53:51
如果需要提取ALLCAPS中的整块单词,请使用
=REGEXEXTRACT(A2,"\b[A-Z]+(?:\s+[A-Z]+)*\b")
=REGEXEXTRACT(A2,"\b\p{Lu}+(?:\s+\p{Lu}+)*\b")
详细信息
\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演示。
在这里,[^a-zA-Z0-9]+
匹配一个或多个字符( ASCII字母和数字除外),[^\p{L}\p{N}]+
匹配除任何Unicode字母和数字以外的任何一个或多个字符。
https://stackoverflow.com/questions/35019496
复制相似问题