【问题标题】:Every word in the sentence capital letter句子中的每个单词都大写
【发布时间】:2020-03-29 14:03:18
【问题描述】:

我正在尝试为我的任务编写一个正则表达式。 句子中的每个单词都以大写字母开头,其余为小写字母。

(^[A-Z]{1}[a-z\s]+)+

例如

Java Test - 好的

Java test - 不行

JaVa Test - 不行

java Test - 不行

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您尝试的模式也将匹配 Java test,因为字符类 [a-z\s]+ 重复列出的任何内容(包括空格)超过 1 次,并且不会强制第二个单词以大写字符开头。

    您可以在每次迭代中重复匹配大写字符的部分,后跟 1+ 个小写字符。

    请注意,\s 也会匹配换行符,您可以省略 {1}

    ^[A-Z][a-z]+(?: [A-Z][a-z]+)*$
    
    • ^ 字符串开始
    • [A-Z][a-z]+ 匹配 1 个大写字母 A-Z 和 1+ 个小写字母 a-z
    • (?:非捕获组
      • [A-Z][a-z]+ 匹配一个空格,1 个大写字母 A-Z 和 1+ 个小写字符 a-z
    • )*关闭非捕获组并重复1次以上
    • $字符串结束

    Regex demo

    除了匹配单个空格,您还可以使用 \h 匹配 1+ 个水平空白字符(在 java 中 \\h

    Regex demo

    【讨论】:

      【解决方案2】:

      如果任何单词中可以有单个字符,例如:

      This Is A Test
      I Am A Programmer
      

      然后你可以使用:

      ^(\b[A-Z][a-z]*\s?\b)+$
      

      demo和解释可以看here

      否则,如果每个单词中总是有多个字符,则可以使用:

      ^(\b[A-Z][a-z]+\s?\b)+$
      

      演示和解释可以在here找到。

      【讨论】:

        猜你喜欢
        • 2018-04-24
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2012-05-20
        相关资源
        最近更新 更多