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

Man*_*pos 7 regex

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

我已经尝试了一些方法(包括 IF 语句),但似乎无法得到它。

这是我的最后一个版本:

(([A-Z])([a-z]+\s|[a-z]+))+
Run Code Online (Sandbox Code Playgroud)

我一开始认为它有效,但现在接受单词中间的大写字母。

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

谢谢!!

Wik*_*żew 7

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

^[A-Z][^A-Z]*$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示^匹配字符串的开头、[A-Z]匹配大写字母、[^A-Z]*匹配 0 个或多个大写字母以外的字符并$匹配字符串的结尾。

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

\b[A-Z][a-zA-Z]*\b
Run Code Online (Sandbox Code Playgroud)

其中\b代表单词边界。请参阅正则表达式演示

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

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

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

另请参阅此演示此演示


Jon*_*oni 6

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

您可以采取一种更结构化的方法:一个句子必须至少有一个单词。那是

[A-Z][a-z]*
Run Code Online (Sandbox Code Playgroud)

在第一个单词之后,您可以得到任意数量的更多单词,每个单词前面都有空格。所以总共:

[A-Z][a-z]*(\s[A-Z][a-z]*)*
Run Code Online (Sandbox Code Playgroud)