1

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

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

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

Str2 = 'Jane Marie Doe';
Str2.matches("[A-Z][a-zA-Z\\s]*");

就像在大写字母后跟任意数量的空格、大写字母和小写字母一样,但这不会强制执行每个空格都必须跟大写字母的规则。我是否需要标记(不确定这是否是正确的单词)或使用空格作为分隔符拆分我的字符串,然后评估每个单词?或者有没有办法将它输入到类似 ([AZ][a-zA-Z]\\s)* 的匹配方法中,其中星号表示括号中整个条目的任意数量?虽然当我输入这个时,我认为这甚至在概念上都行不通,因为最后一个单词后面没有空格。也许 ([AZ][a-zA-Z]\\s?)* 会起作用吗?但是,事实并非如此。有什么会吗?

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

4

4 回答 4

7

试试这个:

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

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

根据您的情况,您可能还需要添加合法标点符号,例如连字符等。

所以,像:

([A-Z][a-zA-Z\-\']*\s*)*
于 2012-11-27T21:52:20.020 回答
1

这应该有效:

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

我只是更改\\s?\\s*允许单词之间匹配多个空格。

于 2012-11-27T21:51:13.813 回答
1

尝试以下正则表达式:

"[A-Z][a-zA-Z]*(\\s+[A-Z][a-zA-Z]*)*$"
于 2012-11-27T21:51:33.353 回答
0

这将起作用

^([A-Z][a-zA-Z]*\s*)+$
于 2017-10-15T07:23:25.603 回答