大写字母中的每个单词

时间:2019-12-04 17:22:40

标签: java regex

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

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

例如

Java Test-好的

Java test-不好

JaVa Test-不好

java Test-不好

2 个答案:

答案 0 :(得分:1)

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

您可以在每次迭代中重复匹配大写字符的部分,然后再匹配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(在Java \\h中)匹配1个以上的水平空格字符

Regex demo

答案 1 :(得分:0)

如果任何单词中都可以包含单个字符:

This Is A Test
I Am A Programmer

然后您可以使用:

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

演示和说明here

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

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

演示和说明可以在here中找到。