matches()匹配必须以Java中的大写字母开头的单词

时间:2012-11-27 21:48:29

标签: java regex string

所以,我一直在使用Java中的'matches()'方法,如:

Str1 = 'Jane';
Str1.matches("[A-Z][a-zA-Z]*");

查找字符串是否以大写字母开头,后跟任意数量的大/小字母。我似乎可以找出所有配置,除非我试图匹配未知数量的单词。例如,如果我想确认一个字符串是由字母和空格组成,其中每个单词以大写字母开头。我以为可以做到

Str2 = 'Jane Marie Doe';
Str2.matches("[A-Z][a-zA-Z\\s]*");
在资本中随后是任意数量的空间,资本和小写,但这并不会强制执行每个空间必须由资本跟随的规则。我是否需要标记(不确定这是否是正确的单词)或者使用空格作为分隔符来分割我的字符串然后评估每个单词?或者有没有办法将其输入匹配方法类似([A-Z] [a-zA-Z] \\ s)*其中星号表示括号中整个条目的任意数字?虽然我正在输入这个,但我认为它甚至在概念上都不起作用,因为最后一个单词后面没有空格。也许([A-Z] [a-zA-Z] \\ s?)*会起作用吗?但是,事实并非如此。有什么东西可以吗?

我确实看到有其他一些问题可以解决这个问题,但我似乎无法找到明确的工作答案。

4 个答案:

答案 0 :(得分:7)

试试这个:

([A-Z][a-zA-Z]*\s*)+

单个大写字母,后跟任意数量的其他字母,后跟任意数量的空格,重复任意次数。

根据您的情况,您可能还想添加法律标点符号,例如连字符和内容。

所以,比如:

([A-Z][a-zA-Z\-\']*\s*)*

答案 1 :(得分:1)

这应该有效:

"([A-Z][a-zA-Z]*\\s*)*"

我刚刚将\\s?更改为\\s*,以允许在单词之间匹配多个空格。

答案 2 :(得分:1)

尝试以下正则表达式:

"[A-Z][a-zA-Z]*(\\s+[A-Z][a-zA-Z]*)*$"

答案 3 :(得分:0)

这将有效

^([A-Z][a-zA-Z]*\s*)+$