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