使用正则表达式从全名删除称呼

时间:2018-06-19 09:32:57

标签: java regex replaceall

我有"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"

2 个答案:

答案 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,} +