现在我的程序使用此模式.*[A-Z].*
来匹配每个带有大写字母的单词。但我的问题是,我需要一种模式,只能在单词的开头标识一个带大写的单词。
我的程序现在输入示例: -
我的名字是Johan,我来自langKawi。
输出匹配: 我的Johan I langKawi。
但是使用我的模式像langKawi这样的单词,其中大写字母不在单词的开头,它仍然匹配。
任何人都可以帮助我使用匹配单词的模式,该单词仅包含第一个字母的大写字母,而我的文本/输入仅包含没有数字和符号的字母字符。谢谢。
答案 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。