什么是正确的正则表达式匹配大写字母只有单词中的第一个字母

时间:2014-06-30 02:21:41

标签: java regex

现在我的程序使用此模式.*[A-Z].*来匹配每个带有大写字母的单词。但我的问题是,我需要一种模式,只能在单词的开头标识一个带大写的单词。

我的程序现在输入示例: -

我的名字是Johan,我来自langKawi。

输出匹配: 我的Johan I langKawi。

但是使用我的模式像langKawi这样的单词,其中大写字母不在单词的开头,它仍然匹配。

任何人都可以帮助我使用匹配单词的模式,该单词仅包含第一个字母的大写字母,而我的文本/输入仅包含没有数字和符号的字母字符。谢谢。

2 个答案:

答案 0 :(得分:4)

使用单词边界在单词开始之前匹配,然后单词,然后是另一个单词边界:

\b[A-Z]\w*\b

在Java中,看起来像这样:

Pattern p = Pattern.compile("\\b([A-Z]\\w*)\\b");

String s = "My name is Johan and I am from langKawi.";
Matcher matcher = p.matcher(s);

while(matcher.find()){
    System.out.println(matcher.group(1));
}

输出:

My
Johan
I

答案 1 :(得分:2)

这就是他们发明\b

的原因
\b[A-Z][A-Za-z]*\b

\b充当单词边界:它匹配空格(和其他分隔符)或字符串的开头和结尾。

捕获所有部分的示例:

import java.util.regex.*;

public class HelloWorld{

     public static void main(String []args){
        Pattern p = Pattern.compile("\\b([A-Z][a-z]*)\\b");
        Matcher m = p.matcher("My name is Johan and I am from langKawi.");
        while(m.find()) {
            System.out.println(m.group(1));
        }
     }
}

您可以测试代码here