使用正则表达式仅提取 ALLCAPS 单词
Extract only ALLCAPS words with regex
正在寻找一种方法来仅从文本字符串中提取全部大写的单词。问题是它不应该提取文本字符串中大小写混合的其他单词。
例如,我如何使用正则表达式从以下句子中提取 KENTUCKY:
There Are Many Options in KENTUCKY
我正在尝试使用 Google 表格中的 regexextract()
执行此操作,它使用 RE2。
期待听到您的想法。
这应该有效:
\b[A-Z]+\b
见demo
假设您的文本在单元格 A2 中:
如果每个文本段中只有一个实例,这将起作用:
=REGEXEXTRACT(A2,"([A-Z]{2,})")
如果单个文本段中有多个实例,那么使用它,它会动态调整正则表达式来为您提取每个实例:
=REGEXEXTRACT(A2, REPT(".* ([A-Z]{2,})", COUNTA(SPLIT(REGEXREPLACE(A2,"([A-Z]{2,})","$"),"$"))-1))
如果您需要提取全部大写单词,请使用
=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字母和数字以外的任意一个或多个字符。
正在寻找一种方法来仅从文本字符串中提取全部大写的单词。问题是它不应该提取文本字符串中大小写混合的其他单词。
例如,我如何使用正则表达式从以下句子中提取 KENTUCKY:
There Are Many Options in KENTUCKY
我正在尝试使用 Google 表格中的 regexextract()
执行此操作,它使用 RE2。
期待听到您的想法。
这应该有效:
\b[A-Z]+\b
见demo
假设您的文本在单元格 A2 中:
如果每个文本段中只有一个实例,这将起作用:
=REGEXEXTRACT(A2,"([A-Z]{2,})")
如果单个文本段中有多个实例,那么使用它,它会动态调整正则表达式来为您提取每个实例:
=REGEXEXTRACT(A2, REPT(".* ([A-Z]{2,})", COUNTA(SPLIT(REGEXREPLACE(A2,"([A-Z]{2,})","$"),"$"))-1))
如果您需要提取全部大写单词,请使用
=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字母和数字以外的任意一个或多个字符。