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

Removing salutations from full name using regex

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

你可以试试这个。

\s[A-Z]{2,}+

您可以使用

   \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