具有正则表达式的大写单词

时间:2016-04-10 22:53:38

标签: regex

我是RegEx的新手,我正在寻找一种方法来匹配第一个字母大写的句子,其余的是小写的。

我尝试过几件事(包括IF语句),但似乎无法得到它。

这是我的上一个版本:

(([A-Z])([a-z]+\s|[a-z]+))+

我认为它最初起作用,但现在接受字母中间的大写字母。

输出就像这样(每个单词大写)。

谢谢!

2 个答案:

答案 0 :(得分:1)

表达式接受世界中间的大写字母,因为现在单词之间的空格是可选的,并且单词可以相互碰撞。

您可以采用更有条理的方法:句子必须至少有一个单词。这是

[A-Z][a-z]*

在初始单词之后,您可以获得任意数量的单词,每个单词前面都有空格。所以总的来说:

[A-Z][a-z]*(\s[A-Z][a-z]*)*

答案 1 :(得分:1)

要匹配以大写字母开头但没有大写字母的整个字符串,请使用

^[A-Z][^A-Z]*$

请参见regex demo^匹配字符串的开头,[A-Z]匹配大写字母,[^A-Z]*匹配0个或多个除大写字母以外的字符,$匹配字符串的结尾。

要匹配大写单词,您可以使用

\b[A-Z][a-zA-Z]*\b

其中\b代表word boundaries。参见regex demo

在各种正则表达式中,还有其他匹配单词边界的方法:

  • (TRE,基数R):\<[A-Z][a-zA-Z]*\>
  • \m[A-Z][a-zA-Z]*\M\y[A-Z][a-zA-Z]*\y
  • (8之前的MySQL版本):[[:<:]][A-Z][a-zA-Z]*[[:>:]]

此外,您可以考虑使用[[:upper:]]\p{Lu}代替[A-Z][[:alpha:]]\p{L}代替[a-zA-Z]来匹配任何Unicode大写字母或相应的任何字母。

也请参见this demothis demo