我有"John Connele MCA MD"
和"John O'Connele"
这样的名字,我使用了这个正则表达式"s*[A-Z]+(?:\.|\b)"
。
String fullName = "John O'Connele MCA MD";
fullName = fullName.replaceAll("s*[A-Z]+(?:\.|\b)","").trim;
System.out.println(fullName)
正则表达式的目的是仅移除称呼和标题,我得到的输出为"John Connele"
,而正确的输出应为"John O'Connele"
答案 0 :(得分:1)
您可以使用
\W*\b[A-Z]+\b(?!'\b)\.?
请参见regex demo。
详细信息
\W*
-任意0+个非单词字符\b
-单词边界(我们需要匹配整个单词)[A-Z]+
-1个以上大写ASCII字母\b
-单词结尾(单词边界)(?!'\b)
-当前位置的右侧不得包含'
,后面紧跟一个字符char。\.?
-1或0 .
个字符。Java demo(请注意,所有反斜杠在字符串文字内都是双精度字,以表示文字反斜杠,正则表达式转义):
String fullName = "John O'Connele MCA,MD.";
fullName = fullName.replaceAll("\\W*\\b[A-Z]+\\b(?!'\\b)\\.?","").trim();
System.out.println(fullName); // => John O'Connele
答案 1 :(得分:0)
您可以尝试一下。
\ s [A-Z] {2,} +