REGEX 查找字符串中的前一个或两个大写单词

标签 regex

我正在寻找一个 REGEX 来查找字符串中的前一两个大写单词。如果前两个词大写,我想要前两个词。连字符应被视为单词的一部分。

  • Madonna has a new album我要找 madonna
  • Paul Young has no new album我要找 Paul Young
  • Emmerson Lake-palmer is not here我要找 Emmerson Lake-palmer

  • 我一直在用^[A-Z]+.*?\b( [A-Z]+.*?\b){0,1}这在前两个上做得很好,但对于第三个例子,我得到 Emmerson Lake , 而不是 Emmerson Lake-palmer .

    我可以使用什么 REGEX 来查找上述示例中的前一两个大写单词?

    最佳答案

    您可以使用

    ^[A-Z][-a-zA-Z]*(?:\s+[A-Z][-a-zA-Z]*)?
    

    regex demo

    基本上,使用字符类 [-a-zA-Z]*而不是点匹配模式只匹配字母和连字符。

    详情
  • ^ - 字符串开头
  • [A-Z] - 一个大写的 ASCII 字母
  • [-a-zA-Z]* - 零个或多个 ASCII 字母/连字符
  • (?:\s+[A-Z][-a-zA-Z]*)? - 一个可选的(1 或 0 由于 ? 量词)序列:
  • \s+ - 1+ 空格
  • [A-Z] - 一个大写的 ASCII 字母
  • [-a-zA-Z]* - 零个或多个 ASCII 字母/连字符

  • Unicode 感知等价物(用于支持 Unicode 属性类的正则表达式风格):
    ^\p{Lu}[-\p{L}]*(?:\s+\p{Lu}[-\p{L}]*)?
    

    哪里\p{L}匹配任何字母和 \p{Lu}匹配任何大写字母。

    关于REGEX 查找字符串中的前一个或两个大写单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43498411/

    相关文章:

    Javascript正则表达式匹配字符串,除非字符串以“开头

    javascript - javascript中嵌套括号的正则表达式

    java - 使用Java Regex,如何在括号前后添加空格?

    JAVA REGEX - 使用 "?"作为分隔符分割字符串

    python - 如何从字符串末尾提取数字

    python - 正则表达式在匹配模式后获取数字

    正则表达式用于数字前的所有空格

    java - REGEX 从图像文件名中获取元素

    Javascript 正则表达式 - 匹配域和任何可能的子域

    java - Eclipse 不允许形成正则表达式字符串