【问题标题】:Capturing uppercase words in text with regex使用正则表达式捕获文本中的大写单词
【发布时间】:2017-08-30 12:20:42
【问题描述】:

我正在尝试在给定的文本中查找大写的单词。单词必须一个接一个地被考虑,并且它们必须至少是其中的 4 个。

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

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

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

【问题讨论】:

    标签: regex go


    【解决方案1】:

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

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

    说明

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

    Demo on regex101

    【讨论】:

    • 好收获。有什么方法可以确保匹配以字母而不是空格开头?
    • @RomeoMihalcea 当然,也将第一个 * 更改为 +! ;-)
    【解决方案2】:

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

    .* 也匹配空字符串。看着你的正则表达式并忽略[A-Z]*,剩下的就是一系列空格。使用+ 确保时不时之间至少有一个大写字符。

    【讨论】:

      【解决方案3】:

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

      一个更好的正则表达式将允许非空格为[A-Z]*(?: *[A-Z]+){4,}.see better regex

      * 之后将指示即使没有空格也至少允许大写。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多