使用正则表达式捕获文本中的大写单词

时间:2017-08-30 12:20:42

标签: regex go

我正在尝试在给定的文本中找到大写的单词。这些词必须一个接一个地被考虑,它们必须至少有4个。

我有一个“差不多”工作的代码,但它捕获了更多:[A-Z]*(?: +[A-Z]*){4,}。捕获组还在这些单词的开头或结尾处包含空格(如边界)。

如果你想测试它,我有一个游乐场:https://regex101.com/r/BmXHFP/2

有没有办法让示例中的正则表达式只捕获第一句中的单词?我使用的语言是Go,它没有后视/前方。

3 个答案:

答案 0 :(得分:2)

在正则表达式中,您只需更改*的第二个+

[A-Z]*(?: +[A-Z]+){4,}

解释

使用(?: +[A-Z]*)时,您将匹配“空格后跟0+字母”。所以你匹配空间。将*替换为+时,如果后面有大写,则匹配空格。

Demo on regex101

答案 1 :(得分:1)

*替换为+ s,您的正则表达式只匹配第一句中的字词。

.*也匹配空字符串。看着你的正则表达式而忽略了[A-Z]*,剩下的就是一系列空格。使用+可以确保每次都有至少一个大写字符。

答案 2 :(得分:1)

您必须将至少1个大写字母标记为[A-Z]*(?: +[A-Z]+){4,},请参阅更新后的regex

更好的正则表达式会允许非空格为[A-Z]*(?: *[A-Z]+){4,}。请参阅更好regex

* 表示即使没有空格也至少允许大写。