正则表达式最多匹配两个单词

我想创建仅能匹配最多单词(无数字)的正则表达式,并将两个用空格分隔的单词视为一个字符串,如果有两个单词,则它们都必须以大写字母开头。

因此,例如:

“字符串”->匹配

“两个字符串”->匹配

“一二三”->不匹配(字符串包含两个以上的单词)

“ 1个字”->不匹配(字符串包含一个或多个数字)

“两个字符串”->不匹配(其中一个字符串不是以大写字母开头)

我试图以不同的方式制作一个大的正则表达式,但是它不起作用。帮助真的很感激。

编辑:我不知道是否有可能为其制作一个大的正则表达式,还是应该将其分成几个较小的正则表达式?

评论
  • xest
    xest 回复

    一种实现方式:

    ^[A-Z][a-z]+\s[A-Z][a-z]+$|^[A-Z][a-z]+$

    You can see a regex101.com demo here

  • 奥巴喵
    奥巴喵 回复

    解决该问题的另一种方法是使用此正则表达式。

    ^([A-Z][a-z]*(\s?)+){1,2}\s*$

    Here I have grouped what constitutes a word i.e ([A-Z][a-z]*(\s?)+).

    然后匹配一到两次。

    如果您想将其匹配一到三遍,则可以简单地将2替换为三个或希望与之匹配的任何数字。

    Check this regex sandbox.

  • 发霉的情书
    发霉的情书 回复

    表达方式

    ^([A-Z][a-z]*( [A-Z][a-z]*)?)$
    

    匹配任何一个或两个单词,每个单词都以大写字母开头,并且后面跟随零个或多个小写字母。 匹配:“是”,“两个字符串”,“ A B” 不匹配:“ Y3”,“两个字符串”,“一个两个三个”,“播放器1”

    如果单词中允许使用大写字母(例如“ JavaScript”),则可以使用:

     ^([A-Z][A-Za-z]*( [A-Z][A-Za-z]*)?)$
    

    如果您还希望单词中包含数字和下划线(例如“ C00k13_”),请使用:

    ^([A-Z]\w*( [A-Z]\w*)?)$
    


    Btw:
    The ^ (starting with) and $ (ending with) ensure that only the whole string can be a match.
    E.g.:
    "Alpha Beta Gamma" -> No match
    "Alpha Beta" -> Match

    A quick demo: regexr.com/5381r