我是RegEx的新手,我正在寻找一种方法来匹配第一个字母大写的句子,其余的是小写的。
我尝试过几件事(包括IF语句),但似乎无法得到它。
这是我的上一个版本:
(([A-Z])([a-z]+\s|[a-z]+))+
我认为它最初起作用,但现在接受字母中间的大写字母。
输出就像这样(每个单词大写)。
谢谢!
答案 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。
在各种正则表达式中,还有其他匹配单词边界的方法:
\<[A-Z][a-zA-Z]*\>
\m[A-Z][a-zA-Z]*\M
或\y[A-Z][a-zA-Z]*\y
[[:<:]][A-Z][a-zA-Z]*[[:>:]]
此外,您可以考虑使用[[:upper:]]
或\p{Lu}
代替[A-Z]
和[[:alpha:]]
或\p{L}
代替[a-zA-Z]
来匹配任何Unicode大写字母或相应的任何字母。