Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于单词中的第一个字母,匹配大写字母的正确正则表达式是什么_Java_Regex - Fatal编程技术网

Java 对于单词中的第一个字母,匹配大写字母的正确正则表达式是什么

Java 对于单词中的第一个字母,匹配大写字母的正确正则表达式是什么,java,regex,Java,Regex,现在,我的程序使用这个模式来匹配每个大写字母的单词。但我的问题是,我需要一种模式,可以识别一个单词的开头只有大写字母 我的程序现在的输入示例:- 我叫约翰,来自兰卡威 输出匹配: 我的约翰·兰卡威 但是使用我的模式,像langKawi这样的单词,大写字母不在单词的开头,它仍然匹配 有人能帮我找到一种模式吗?它匹配的单词只有大写字母,而我的文本/输入只包含字母字符,没有数字和符号。谢谢。在单词开始之前,先使用单词边界进行匹配,然后是单词边界,然后是另一个单词边界: \b[A-Z]\w*\b 在J

现在,我的程序使用这个模式来匹配每个大写字母的单词。但我的问题是,我需要一种模式,可以识别一个单词的开头只有大写字母

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

我叫约翰,来自兰卡威

输出匹配: 我的约翰·兰卡威

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


有人能帮我找到一种模式吗?它匹配的单词只有大写字母,而我的文本/输入只包含字母字符,没有数字和符号。谢谢。

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

\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

这就是为什么他们发明了
\b

\b[A-Z][A-Za-z]*\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));
        }
     }
}

您可以测试代码。

@zx81:否则正则表达式将包括(潜在的)单词边界,如空格。为了防止出现这种情况,您只对重要部分进行分组。@CommuSoft不是这样的:
\b
是一个零宽度断言。它不消耗能量。:)@zx81:出于好奇:如果您想捕获边界(假设您对单词末尾的分隔符感兴趣),该怎么办?捕获边界是一种常见且有用的技术。例如,它被用于在“看不见的地方”进行分割,比如在
myBeautifulCamel
中的驼峰空间分隔符之间,我所说的是最广义的边界,包括
\b
和DIY边界,如环顾四周。我用我的数据测试了该模式,它是有效的。非常感谢nick。非常感谢@CommuSoft。我应该更多地学习如何使用\b并了解其功能。